在Matplotlib pyplot中设置坐标轴限制

26

我有一个图中包含两个子图。我想设置第二个子图的坐标轴,使其与第一个子图具有相同的限制(这取决于绘制的值而改变)。请问有谁能帮助我吗?以下是代码:

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轴上限。谢谢。
2个回答

14

你提出的解决方案应该可以奏效,特别是如果图形是交互式的(如果一个改变,它们将保持同步)。

作为另一种选择,你可以手动设置第二轴的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


12

我在matplotlib网站上做了更多的搜索,找到了一种方法来实现它。如果有更好的方法,请告诉我。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接