在twinx()后,Matplotlib轴自动缩放不起作用

时间:2014-12-06 01:38:15

标签: python matplotlib

我发现在使用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

感谢。

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.dataLimaxL.dataLim的联合仍会提供[-np.inf, np.inf],然后折叠为[0,0]


编辑:最近修复了此问题(here)。升级到matplotlib v1.4。*应该可以解决问题。