相关:plotting autoscaled subplots with fixed limits in matplotlib
我想使用subplots
新的紧凑样式制作一组全部在同一比例下的子图,就像在http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplots中一样,并使它们成为正方形。
我试过了:
fig, axes = subplots(numplots, 1, sharex=True, sharey=True, adjustable='box', aspect='equal')
但我发现这些关键字参数未在subplots
包装器中实现。有什么办法呢?
重申一下,目标只是让共享轴,以便所有数据都具有相同的比例,并使图形为正方形。
答案 0 :(得分:19)
只需使用adjustable='box-forced'
代替adjustable='box'
。
正如@cronos所提到的,你可以使用subplot_kw
kwarg传递它(subplots
的其他关键字参数传递给Figure
而不是Axes
,因此需要subplot_kw
)。
相反,我将使用setp
,基本上只使用for item in sequence: item.set(**kwargs)
。 (所有matplotlib艺术家都有一个set
方法,可以类似于matlab的set
使用。)
哪一个是“更好”的方法将取决于你正在做什么。很多人都认为setp
非常“单调”,但我没有看到它的问题。
作为一个简单的例子:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=3, sharex=True, sharey=True)
plt.setp(axes.flat, aspect=1.0, adjustable='box-forced')
axes[0].plot(range(50))
plt.show()
我忘记了目前两种不同可调节盒子样式的原因。我记得我第一次遇到它时发现它真的很混乱,而且我挖出了代码并且有一些明显的原因......我现在不记得那个原因是什么。
答案 1 :(得分:2)
您所引用的文档建议使用subplot_kw
fig, axes = subplots(numplots, 1, sharex=True, sharey=True, subplot_kw=dict(adjustable='datalim', aspect='equal'))
然而,共享轴似乎需要datalim作为可调整,图表正确缩放但不是正方形。如果省略共享轴,则“框”有效。你的来电。