如何根据某些数据预测matplotlib在哪里绘制刻度线?

时间:2014-01-24 18:34:26

标签: python matplotlib plot

Matplotlib可以很好地设置轴上的限制和刻度以捕获数据范围,同时将刻度线放在间隔很小的圆数上。

我希望能够预测在发生之前为一组数据绘制蜱的位置(实际上,我很高兴知道蜱的限制,我不需要知道特别是内部蜱将被绘制的地方。)

我在Axes和各种Ticker对象周围捅了一下,但我似乎无法找到这种情况发生的地方。理想情况下,我正在寻找一个函数automatic_ticker,如果我有两个向量,

x, y = np.random.randn(2, 30)

我可以打电话

xticks_predict = plt.automatic_ticker(x)

然后

plt.plot(x, y)
xticks_actual, _ = plt.xticks()

assert tuple(xticks_predict) == tuple(xticks_actual)

这是否存在?

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找类似的东西:

from matplotlib.ticker import MaxNLocator
xticks_predict = MaxNLocator(integer=True, symmetric=True).tick_values(x.min(), x.max())

但是我看到测试与plt.plot(x,y)中使用的滴答有一些差异,其中大多数似乎是关于原点的不对称滴答范围 - 即使使用symmetric=Truedocs表示AutoLocator是典型的默认值,但是当plt.plot()中使用的刻度都是整数时,我发现它返回小数值的刻度位置(例如2.5)。 / p>

当然,您可以通过将绘图刻度设置为预测的刻度来“欺骗”:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MaxNLocator

np.random.seed(seed=0)
x, y = np.random.randn(2, 30)
ticking = MaxNLocator(integer=True, symmetric=True)
xticks_predict = ticking.tick_values(x.min(), x.max())
plt.plot(x, y)
plt.xticks(xticks_predict)
plt.savefig("example.pdf")