15

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

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

4

2 回答 2

19

只需使用adjustable='box-forced'而不是adjustable='box'.

正如@cronos 所提到的,您可以使用subplot_kwkwarg 传递它(附加关键字参数subplots传递给Figurenot the Axes,因此需要 for subplot_kw)。

相反,我将使用setp,它基本上只是for item in sequence: item.set(**kwargs). (所有 matplotlib 艺术家都有一种set可以使用类似于 matlab 的方法set。)

哪一种是“更好”的方法将取决于你在做什么。很多人会争辩说这setp是非常“unpythonic”,但我看不出它有什么问题。

举个简单的例子:

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

在此处输入图像描述

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

于 2012-12-01T20:16:11.930 回答
2

您参考的文档建议使用 subplot_kw

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

然而,共享轴似乎需要 datalim 为可调节的,绘图正确缩放但不是正方形。如果您省略了共享轴,则“框”可以工作。你的来电。

于 2012-11-29T17:17:09.183 回答