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)
这个存在吗?
最佳答案
我认为您正在寻找类似的东西:
from matplotlib.ticker import MaxNLocator
xticks_predict = MaxNLocator(integer=True, symmetric=True).tick_values(x.min(), x.max())
但我发现测试与 plt.plot(x, y) 中使用的刻度存在一些差异,其中大部分似乎是关于原点的不对称刻度范围 --- 即使 symmetric=True
。 docs指示 AutoLocator
作为典型的默认值,但我发现当 plt.plot() 中使用的刻度都是整数时,它会返回小数刻度位置(例如 2.5
)。
当然,您可以通过将绘图刻度设置为预测刻度来“作弊”:
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")
关于python - 给定一些数据,我如何预测 matplotlib 将在何处绘制刻度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339905/