我正在用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)
导致:
在这种情况下,我希望只有0.1和0.2的刻度。
答案 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)
会给:
但是使用范围更大的y数据:
y = [0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.5,10,0.1]
给出: