我遇到了这段代码的问题:
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')
答案 0 :(得分:2)
这是因为您在多个y轴对象之间共享相同的定位器对象。
这不是一个错误,但它是一个微妙的问题,可能会导致很多混乱。文档可能更清楚这一点,但定位器应该属于单个axis
。
你实际上可以共享相同的Formatter
个实例,但最好不要这样做,除非你知道这些后果(对一个的更改会影响所有)。
不是回收相同的Locator
和Formatter
实例,而是为每个轴创建新的实例:
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()