我在这段代码上遇到了麻烦:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

majorLocator   = MultipleLocator(0.1)
majorFormatter = FormatStrFormatter('%2.1f')

fig = plt.figure()
axes = []

for i in range(4):
    axes.append(fig.add_subplot(2,2,i+1))

for ax in axes:
    ax.yaxis.set_major_locator(majorLocator)
    ax.yaxis.set_major_formatter(majorFormatter)
    ax.set_ylim(0,1)

axes[-1].set_ylim(1,2) #If you comment this line all works fine.

plt.show()


在我的屏幕上出现一个刻度问题。



但是,如果我评论axes[-1].set_ylim(1,2)行,则所有刻度均正确显示。这是一个错误吗?还是我做错了?

(matplotlib'1.3.0')

最佳答案

这是因为您要在多个y轴对象之间共享同一个定位器对象。

这不是一个错误,但它是一个细微的问题,可能引起很多混乱。文档可能对此更加清楚,但是定位符应该属于单个axis

实际上,您可以共享相同的Formatter实例,但是最好不要共享,除非您知道后果(更改为1会影响全部)。

不必回收相同的LocatorFormatter实例,而是为每个轴创建一个新实例:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

fig, axes = plt.subplots(2, 2)
for ax in axes.flat:
    ax.yaxis.set(major_locator=MultipleLocator(0.1),
                 major_formatter=FormatStrFormatter('%2.1f'))
    ax.set_ylim(0, 1)

axes[-1, -1].set_ylim(1, 2)

plt.show()

关于python - 具有子图的MultipleLocator()的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24743410/

10-12 18:48