在matplotlib pyplot中设置坐标轴限制

26 投票
2 回答
74534 浏览
提问于 2025-04-16 03:44
plt.ylim((ymin,ymax))

我有一个图形里面有两个子图。我想把第二个子图的坐标轴设置成和第一个子图一样的范围(这个范围会根据绘制的值而变化)。有人能帮我吗?这是我的代码:

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()

第一个子图中定义了这个参数,然后在第二个子图中设置了这个参数。但是这样不行,因为返回的值ymax是第一个子图中y变量的最大值(平均值),而不是y轴的上限。

提前谢谢你们。

2 个回答

15

你提出的解决方案应该是可行的,特别是如果这些图表是互动的(也就是说,如果其中一个图表发生变化,另一个也会跟着变化)。

另外,你也可以手动设置第二个坐标轴的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

12

我在matplotlib的网站上查了一些资料,找到了一个解决办法。如果有人有更好的方法,请告诉我。

在第一个子图中,把 plt.subplot(211, axisbg = 'w') 替换成 ax1 = plt.subplot(211, axisbg = 'w')。然后,在第二个子图中,给子图命令加上 sharex = ax1sharey = ax1 这两个参数。也就是说,第二个子图的命令现在看起来是:

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

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

撰写回答