matplotlib中共享轴方形子图的新pythonic风格?

时间:2012-11-29 16:15:17

标签: python numpy matplotlib scipy

相关: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包装器中实现。有什么办法呢?

重申一下,目标只是让共享轴,以便所有数据都具有相同的比例,并使图形为正方形。

2 个答案:

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

enter image description here

我忘记了目前两种不同可调节盒子样式的原因。我记得我第一次遇到它时发现它真的很混乱,而且我挖出了代码并且有一些明显的原因......我现在不记得那个原因是什么。

答案 1 :(得分:2)

您所引用的文档建议使用subplot_kw

fig, axes = subplots(numplots, 1, sharex=True, sharey=True, subplot_kw=dict(adjustable='datalim', aspect='equal'))

然而,共享轴似乎需要datalim作为可调整,图表正确缩放但不是正方形。如果省略共享轴,则“框”有效。你的来电。