我想在二维图中限制y轴上的抽动的总数。在提供的示例图像中,您可以看到F_X图有6个总抽提点(0,0.2,0.4,0.6,0.8,1),而F_Y图有8。是否有一种方法可以自动地拥有轴标度,但确定全部抽动的数量,因为在我的例子中,大于6tics的图看起来太忙了吗?

发布于 2015-08-16 19:50:03
ax.locator_params(axis='y', nbins=num)是最容易做到这一点的方法。
nbins将设置每个轴的最大回收箱数(即滴答之间的空格)。“偶数”仍将被选中,但这个值控制着轴上滴答的密度。一个新的轴的默认值是9(换句话说,最多10个滴答/滴答标签)。
例如,让我们设置一些默认情况下看起来相当繁忙的东西:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1977)
# Generate some data with different ranges
x = np.linspace(0, 8.8, 1000)
ydata = np.random.normal(0, 1, (4, x.size)).cumsum(axis=1)
ydata *= np.array([1e-3, 1e3, 10, 1e-2])[:,None]
fig, axes = plt.subplots(nrows=4)
for y, ax in zip(ydata, axes):
ax.plot(x, y, color='salmon')
plt.show()

喂!!不怎么好!让我们看看能否做得更好:
fig, axes = plt.subplots(nrows=4)
for y, ax in zip(ydata, axes):
ax.plot(x, y, color='salmon')
ax.locator_params(axis='y', nbins=5)
plt.show()

到了那里,但还是有点忙。我们可以进一步降低nbins,但我们很快就会没有滴答声。相反,我喜欢使用的一个技巧是“修剪”轴上的第一个和最后一个滴答。这也可以由locator_params控制。
fig, axes = plt.subplots(nrows=4)
for y, ax in zip(ydata, axes):
ax.plot(x, y, color='salmon')
ax.locator_params(axis='y', nbins=5, prune='both')
plt.show()

这种“剪枝”如果与共享的x轴相结合,在你正在制作的地块类型的情况下会更加有效。这篇文章的主要效果是关闭一些x-滴答标签。然而,这也将连接所有轴的交互缩放和摇摄,从而共享x范围:
fig, axes = plt.subplots(nrows=4, sharex=True)
for y, ax in zip(ydata, axes):
ax.plot(x, y, color='salmon')
ax.locator_params(axis='y', nbins=5, prune='both')
plt.show()

现在我们可以把东西移近一点:
fig, axes = plt.subplots(nrows=4, sharex=True)
for y, ax in zip(ydata, axes):
ax.plot(x, y, color='salmon')
ax.locator_params(axis='y', nbins=5, prune='both')
fig.subplots_adjust(hspace=0)
plt.show()

最后,在这种特殊情况下,您还可以考虑使用ax.margins(...)在y方向添加一些填充,并在x方向强制“紧密”缩放数据范围。
fig, axes = plt.subplots(nrows=4, sharex=True)
for y, ax in zip(ydata, axes):
ax.plot(x, y, color='salmon')
ax.margins(x=0, y=0.05)
ax.locator_params(axis='y', nbins=5, prune='both')
fig.subplots_adjust(hspace=0)
plt.show()

https://stackoverflow.com/questions/32039004
复制相似问题