这个问题看起来很简单,但我找不到一种蟒蛇式的方法来解决它。我有几个(四)子图,它们应该具有相同的xlim
和ylim
。在的所有子地块上迭代
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)
——几乎是对的,但现在除了左边和最下面一行之外,记号都不见了。
通过matplotlib.pyplot.setp()
设置Artist对象的xlim
和ylim
属性https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.pyplot.setp.html
# 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.
custom_xlim = (0, 100)
custom_ylim = (-100, 100)
# Setting the values for all axes.
plt.setp(ax, xlim=custom_xlim, ylim=custom_ylim)
你可以试试这个。
#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)
您可以使用共享轴,共享x和/或y限制,但允许以任何其他方式自定义轴。
如果您有多个子批次,即
fig, ax = plt.subplots(4, 2)
你可以用它。它从第一个图中得到y轴的极限。如果您想要其他子图,只需更改ax[0,0]
的索引即可。
plt.setp(ax, ylim=ax[0,0].get_ylim())
这一点都不优雅,但它对我有用…
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)