2014-12-06 103 views
0

我发现使用twinx创建第二个轴后,我无法使轴自动缩放在第一个轴上工作。这是预期的吗?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 

当我运行它在y方向autoscales正确地在左侧轴(0〜5),但改变了X轴规模而不是正确的0至10 +/- 0.06上面的代码。但是,一旦axR不再空白,并且在axR上绘制某些东西,它就会像我期望的那样运行。

这只是一个例子,因为我在更复杂的PyQT4 GUI中遇到了这个问题,允许用户创建多个子图块&左/右组合。由于用户是手动控制剧情创建顺序的用户,因此可能出现上述情况。

是否有自动缩放的方式使用空白twinx右轴。或者是Xlimit只能手动设置?

仅供参考,我使用Python 3.4与Matplotlib V1.3.1

由于蟒蛇V2.0.1的一部分。

回答

1

这只是一个解决方法,而不是一个正确的解决方案或解释。

只要在右侧轴上添加一个不可见的点,所以它不是完全空:

axR.plot(0, 0, visible=False) 

你必须确保虽然,看不见的点在于,你在axL绘制数据的范围内。例如: -

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。*应该可以解决问题。

+0

谢谢!在我的个人计算机上升级matplotlib后,我测试了它,并且按预期工作。不幸的是,在工作中,一切都是配置控制的,所以我将不得不看看我是否能说服他们这样做。 – 2014-12-07 21:31:46