matplotlib中共享坐标轴正方形子图的新Python风格?

15

相关问题: 如何在matplotlib中制作自动缩放但又限定范围的subplot

我想要创建一组子图,它们都使用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个回答

20

只需使用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非常“不符合Python风格”,但我不认为有问题。

以下是一个快速示例:

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

在此输入图像描述

我忘记了这两种可调整框的不同样式的原因。我记得第一次遇到时我感到非常困惑,我仔细研究了代码,发现其中有很明显的原因……然而,我现在无法回想起那个原因。


2

你所参考的文档建议使用subplot_kw子图参数

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

然而,共享轴似乎需要将数据限制设置为可调整的,图形可以正确缩放但不是正方形。如果省略共享轴,则“box”有效。你自己决定。

但我想要共享坐标轴并且绘图是正方形的。怎样才能实现呢?正如您所指出的,datalimequal方面不能解决这个问题。这一定有一个非常简单的解决方案吧? - user248237
我不确定,但恐怕这是不可能的,因为如果尝试使用“box”和“equal”,则会出现“ValueError:可调整必须为共享轴的“datalim””。 - cronos
那么,在Matplotlib中创建共享坐标轴的正方形子图有什么方法呢?这是一个非常简单的绘图需求,而且Matplotlib功能如此强大,一定有方法可以实现吧? - user248237
1
被错误信息“必须是”误导了。@JoeKington说得对,adjustable='box-forced'可以完成任务。在subplot_kw字典中也可以正常工作。 - cronos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接