小编典典

在matplotlib中创建方形子图(高度和宽度相等)

python

当我运行这段代码

from pylab import *

figure()
ax1 = subplot(121)
plot([1, 2, 3], [1, 2, 3])
subplot(122, sharex=ax1, sharey=ax1)
plot([1, 2, 3], [1, 2, 3])
draw()
show()

我得到两个子图,它们在X维度中被“压缩”。对于两个子图,如何获得这些子图,以使Y轴的高度等于X轴的宽度?

我在Ubuntu 10.04上使用matplotlib v.0.99.1.2。

更新2010-07-08 :让我们看一些不起作用的事情。

整天谷歌搜索之后,我认为这可能与自动缩放有关。所以我尝试摆弄它。

from pylab import *

figure()
ax1 = subplot(121, autoscale_on=False)
plot([1, 2, 3], [1, 2, 3])
subplot(122, sharex=ax1, sharey=ax1)
plot([1, 2, 3], [1, 2, 3])
draw()
show()

matplotlib坚持自动缩放。

from pylab import *

figure()
ax1 = subplot(121, autoscale_on=False)
plot([1, 2, 3], [1, 2, 3])
subplot(122, sharex=ax1, sharey=ax1, autoscale_on=False)
plot([1, 2, 3], [1, 2, 3])
draw()
show()

在这一过程中,数据完全消失了。WTF,matplotlib?只是WTF?

好吧,也许我们可以确定宽高比吗?

from pylab import *

figure()
ax1 = subplot(121, autoscale_on=False)
plot([1, 2, 3], [1, 2, 3])
axes().set_aspect('equal')
subplot(122, sharex=ax1, sharey=ax1)
plot([1, 2, 3], [1, 2, 3])
draw()
show()

这使第一个子图完全消失。那真好笑!谁想到了那个?

严肃地说,现在……这真的很难完成吗?


阅读 225

收藏
2021-01-20

共1个答案

小编典典

当您使用sharex和sharey时,设置绘图方面的问题就会出现。

一种解决方法是仅不使用共享轴。例如,您可以这样做:

from pylab import *

figure()
subplot(121, aspect='equal')
plot([1, 2, 3], [1, 2, 3])
subplot(122, aspect='equal')
plot([1, 2, 3], [1, 2, 3])
show()

但是,更好的解决方法是更改​​“ adjustable”键warg …您想要Adjustable
=’box’,但是当您使用共享轴时,它必须是Adjustable =’datalim’(并将其设置回’box’ ‘给出一个错误)。

但是,还有第三个选项adjustable可以处理这种情况:adjustable="box-forced"

例如:

from pylab import *

figure()
ax1 = subplot(121, aspect='equal', adjustable='box-forced')
plot([1, 2, 3], [1, 2, 3])
subplot(122, aspect='equal', adjustable='box-forced', sharex=ax1, sharey=ax1)
plot([1, 2, 3], [1, 2, 3])
show()

或者采用更现代的风格(请注意:答案的这一部分在2010年将无法使用):

import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=2, sharex=True, sharey=True)
for ax in axes:
    ax.plot([1, 2, 3], [1, 2, 3])
    ax.set(adjustable='box-forced', aspect='equal')

plt.show()

无论哪种方式,您都会获得类似于以下内容的信息:

在此处输入图片说明

2021-01-20