Matplotlib最小刻度距离

时间:2018-03-19 13:11:27

标签: python matplotlib format

我正在用matplotlib绘制数据,这些数据在很多时期内具有不同的幅度。在某些时期几乎没有任何幅度(例如0.1的数据分辨率为0.1)。因此,matplotlib以比数据实际分辨率更精细的分辨率创建刻度。

有没有办法在刻度线之间定义最小距离?

由于数据幅度可能很高,我不能对所有图使用相同的固定距离。我想保持自动选择的刻度,除了它们比0.1更精细的时期。

这是一个低振幅周期的MWE,说明了问题:

from matplotlib import pyplot as plt
import matplotlib.ticker as mtick
x = range(10)
y = [0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.1,0.1,0.1]
fig,ax = plt.subplots()
ax.plot(x,y)

导致:

enter image description here

在这种情况下,我希望只有0.1和0.2的刻度。

1 个答案:

答案 0 :(得分:1)

您可以计算最小和最大y值之间的差异。然后,如果该差异小于某个数字,则创建一个带有0.1间距的刻度列表,否则创建带有1个间距的刻度。

例如:

x = range(10)
y = [0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.1,0.1,0.1]

diff = max(y) - min(y)
if diff < 2:
    ticks = np.arange(min(y), max(y)+0.05, 0.1)
else:
    ticks = np.arange(min(y), max(y)+0.5, 1)

fig,ax = plt.subplots()
ax.plot(x,y)
ax.set_yticks(ticks)

会给:

enter image description here

但是使用范围更大的y数据:

y = [0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.5,10,0.1]

给出:

enter image description here