2010-09-05 104 views
23

我在图中有两个子图。我想设置第二个子图的轴,使其具有与第一个子图(根据绘制的值而变化)相同的限制。有人可以帮帮我吗?下面是代码:在matplotlib中设置轴极限pyplot

import matplotlib.pyplot as plt 

plt.figure(1, figsize = (10, 20)) 
## First subplot: Mean value in each period (mean over replications) 
plt.subplot(211, axisbg = 'w') 
plt.plot(time,meanVector[0:xMax], color = '#340B8C', 
     marker = 'x', ms = 4, mec = '#87051B', markevery = (asp, 
                  2*asp)) 
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45) 
plt.axhline(y = Results[0], color = '#299967', ls = '--') 
plt.ylabel('Mean Value') 
plt.xlabel('Time') 
plt.grid(True) 


## Second subplot: moving average for determining warm-up period 
## (Welch method) 
plt.subplot(212)  
plt.plot(time[0:len(yBarWvector)],yBarWvector, color = '#340B8C') 
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45) 
plt.ylabel('yBarW') 
plt.xlabel('Time') 
plt.xlim((0, T)) 
plt.grid(True) 

在第二次要情节,应该是什么样的论据plt.ylim()功能?我试图在第一副区限定

ymin, ymax = plt.ylim() 

,然后在第二副区设置

plt.ylim((ymin,ymax)) 

。但是这并不奏效,因为返回值ymax是第一个子图中y变量(平均值)取得的最大值,而不是y轴的上限。

在此先感谢。

回答

12

我在matplotlib网站上搜索了更多,并想出了一个办法。如果有人有更好的方法,请让我知道。

在第一个子图中用ax1 = plt.subplot(211, axisbg = 'w') 代替plt.subplot(211, axisbg = 'w')。然后,在第二个子图中,将参数sharex = ax1sharey = ax1添加到子图命令。也就是说,现在看第二个小区命令:

plt.subplot(212, sharex = ax1, sharey = ax1) 

这就解决了这个问题。但如果还有其他更好的选择,请告诉我。

13

您提出的解决方案应该可行,特别是如果图是交互式的(如果有变化,它们将保持同步)。

作为替代方法,您可以手动设置第二个轴的y轴限制以匹配第一个轴的y轴限制。例如:

from pylab import * 

x = arange(0.0, 2.0, 0.01) 
y1 = 3*sin(2*pi*x) 
y2 = sin(2*pi*x) 

figure() 
ax1 = subplot(211) 
plot(x, y1, 'b') 

subplot(212) 
plot(x, y2, 'g') 
ylim(ax1.get_ylim())  # set y-limit to match first axis 

show() 

alt text