为matplotlib

时间:2015-06-23 15:24:20

标签: python matplotlib

这个问题看起来很简单,但我无法找到解决它的pythonic方法。我有几个(四个)子图,它们应该具有相同的xlimylim。迭代所有子图

f, axarr = plt.subplots(4)
for x in range(n):
    axarr[x].set_xlim(xval1, xval2)
    axarr[x].set_ylim(yval1, yval2)

不是最好的做事方式,特别是对于2x2子图 - 这正是我实际处理的内容。我正在寻找像plt.all_set_xlim(xval1, xval2)这样的东西。

请注意,我不希望任何其他内容发生变化(应单独控制标记和标签)。

编辑:我正在使用plt.subplots(2, 2)包装器。在dienzs回答之后,我尝试了plt.subplots(2, 2,sharex=True, sharey=True) - 几乎是正确的,但现在除了左下排之外,蜱已经消失了。

5 个答案:

答案 0 :(得分:3)

您可以使用shared axes分享x和/或y限制,但允许以任何其他方式自定义轴。

答案 1 :(得分:2)

通过xlim https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.pyplot.setp.html

在Artist对象上设置ylimmatplotlib.pyplot.setp()属性
# Importing matplotlib.pyplot package.
import matplotlib.pyplot as plt

# Assigning 'fig', 'ax' variables.
fig, ax = plt.subplots(2, 2)

# Defining custom 'xlim' and 'ylim' values.
xlim = (0, 100)
ylim = (-100, 100)

# Setting the values for all axes.
plt.setp(ax, xlim=xlim, ylim=ylim)

答案 2 :(得分:1)

你可以试试这个。

#set same x,y limits for all subplots
fig, ax = plt.subplots(2,3)
for (m,n), subplot in numpy.ndenumerate(ax):
    subplot.set_xlim(xval1,xval2)
    subplot.set_ylim(yval1,yval2)

答案 3 :(得分:0)

这一点都不优雅,但是对我有用...

fig, axes = plt.subplots(6, 3, sharex=True)
axes[0, 0].set_xlim(right=10000) # sharex=True propagates it to all plots
for i in range(6):
    for j in range(3):
        axes[i, j].plot('Seconds', df.columns[2+3*i+j], data=df)  # your plot instructions
plt.subplots_adjust(wspace=.5, hspace=0.2)

答案 4 :(得分:0)

如果您有多个子图,即

fig, ax = plt.subplots(4, 2)

您可以使用它。它从第一个图获得y轴的极限。如果需要其他子图,只需更改ax[0,0]的索引即可。

plt.setp(ax, ylim=ax[0,0].get_ylim())