我发现在使用twinx创建第二个轴后,我无法使轴自动缩放在第一个轴上工作。这是预期的吗?
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 *y1
fig, axL = plt.subplots() # Make Left Axes
axR = axL.twinx() # Make Left Axes
axL.plot(x, y1, 'g-') # Plot on Left
axL.grid()
axL.autoscale(enable=True, axis=u'both', tight=False)
plt.show()
# Do some stuff then later plot on axR
当我运行上面的代码时,它在左轴(0到5)上正确地在y方向上自动缩放,但是将X轴刻度更改为+/- 0.06而不是正确的0到10.但是,一旦axR不再是空白,在axR上绘制了一些东西,它表现得像我期望的那样。
这只是一个例子,因为我在更复杂的PyQT4 GUI中首次遇到这个问题,它允许用户创建多个子图和&左/右组合。由于用户是手动控制绘图创建顺序的用户,因此上述情况可能会出现。
自动缩放是否有办法使用空白的双轴右轴。或者Xlimit是否必须手动设置?
仅供参考,我使用Python 3.4作为Anaconda v2.0.1的一部分,使用Matplotlib v1.3.1
感谢。
答案 0 :(得分:1)
这仅仅是一种解决方法而非正确的解决方案或解释。
只需在右轴添加一个不可见的点,使其不是完全空的:
axR.plot(0, 0, visible=False)
您必须确保,不可见点位于您在axL
中绘制的数据范围内。 E.g:
axR.plot(np.mean(x),np.mean(y1),visible=False)
至于解释(我猜测):
axR.dataLim
最初为[-np.inf, np.inf]
。 axR.dataLim
和axL.dataLim
的联合仍会提供[-np.inf, np.inf]
,然后折叠为[0,0]
。
编辑:最近修复了此问题(here)。升级到matplotlib v1.4。*应该可以解决问题。