【问题标题】:How to use Matplotlib to plot curves with nonlinear x axis ticks?如何使用 Matplotlib 绘制具有非线性 x 轴刻度的曲线?
【发布时间】:2021-02-05 01:55:16
【问题描述】:

目前,我可以使用以下代码将我的数据绘制为两条曲线。

from numpy import *
import math
import matplotlib.pyplot as plt

t = [1,2,4,8] 
raw_1 = [0.02, 0.02, 0.3, 0.4] 
raw_2 = [0.6, 0.7, 0.2, 0.3]
plt.plot(t, raw_1, color='r', marker='o') 
plt.plot(t, raw_2, color='b', marker='o')  
plt.show()

但是,我希望使 x 轴成为非线性。例如,只有 1、2、4、8 是可见的,并且它们的 x-ticks 以相同的距离分开。如图:

我对 Matplotlib 不是很熟悉,谁能告诉我如何使用上面的 x 轴生成绘图?

我尝试了 plt.xscale('log'),但得到了以下情节:

2 个相邻节点之间的距离看起来不错,但 xticks 看起来不太好。

【问题讨论】:

  • plt.scale('log') 将设置对数刻度距离。参见例如Custom scientific axis unit for a bar plot with log scale x-axis
  • 有两种方法可以做到这一点。 1. 可以在对数刻度中绘制 x 轴。 2. 可以使用 1,2,4,8 作为分类变量。你觉得哪种方式更合适?
  • 请不要使用from numpy import *,但请始终使用import numpy as np。你会得到非常奇怪的行为,因为 numpy 重新定义了一些非常常见的函数。
  • @kate-melnykova 是否可以使用 1,2,4,8 作为分类变量?我试过 plt.xscale('log'),但棍子看起来很奇怪。

标签: python matplotlib plot curve non-linear


【解决方案1】:

为此绘制任意等间距数字(使用range() 很方便),然后将标签替换为您的实际标签:

t = [1,2,4,8] 
raw_1 = [0.02, 0.02, 0.3, 0.4] 
raw_2 = [0.6, 0.7, 0.2, 0.3]
x = range(len(t))
plt.plot(x, raw_1, color='r', marker='o') 
plt.plot(x, raw_2, color='b', marker='o')
plt.xticks(x,t)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 2019-12-18
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2022-01-22
    • 2022-12-18
    • 2023-01-30
    相关资源
    最近更新 更多