Python 如何结合aspect=equal and adjustable='使用sharex和sharey;框强制';要在matplotlib中创建具有相同比例的子地块?

Python 如何结合aspect=equal and adjustable='使用sharex和sharey;框强制';要在matplotlib中创建具有相同比例的子地块?,python,matplotlib,Python,Matplotlib,我试图创建四个子图,它们的轴代表不同方向上的不同距离范围[km],除了右下子图的x轴代表计数。在所有子地块中,所有距离轴应具有相同的比例。此外,顶部的两个子地块应共享其y轴,左侧的两个子地块应共享其x轴 接下来(其解决方案适用于x轴和y轴上的相等限制),我尝试了sharex、sharey、aspect和可调参数的几种组合,但都没有成功 有没有办法实现这种绘图,特别是在不影响任何轴限制的情况下 这是我的MCVE: import matplotlib.pyplot as plt lim1 = [0.

我试图创建四个子图,它们的轴代表不同方向上的不同距离范围[km],除了右下子图的x轴代表计数。在所有子地块中,所有距离轴应具有相同的比例。此外,顶部的两个子地块应共享其y轴,左侧的两个子地块应共享其x轴

接下来(其解决方案适用于x轴和y轴上的相等限制),我尝试了sharex、sharey、aspect和可调参数的几种组合,但都没有成功

有没有办法实现这种绘图,特别是在不影响任何轴限制的情况下

这是我的MCVE:

import matplotlib.pyplot as plt
lim1 = [0.,30.]
lim2 = [0.,15.]
lim3 = [0.,75.]
lim4 = [0,5]
xdat = [12.,25.]
ydat = [6.,12.]
zdat = [50.,25.]
cdat = [1,1]
fig = plt.figure()
ax1 = plt.subplot(221,aspect='equal',adjustable='box-forced')
ax1.plot(xdat,ydat,'o')
ax1.set_xlim(lim1)
ax1.set_ylim(lim2)
ax2 = plt.subplot(222,aspect='equal',adjustable='box-forced',sharey=ax1)
ax2.plot(zdat,ydat,'o') 
ax2.set_xlim(lim3)
ax3 = plt.subplot(223,aspect='equal',adjustable='box-forced',sharex=ax1)
ax3.plot(xdat,zdat,'o')
ax3.set_ylim(lim3)
ax4 = plt.subplot(224)
ax4.plot(cdat,zdat,'o')
ax4.set_xlim(lim4)
ax4.set_ylim(lim3)
plt.show()
我想得到一些类似下图的东西,它显示了我上面提到的共享轴,在不同的距离轴上保持原始轴限制和相同的比例

我目前正在使用:
平台:Linux Ubuntu 14.04.5 LTS
matplotlib:1.5.1

python:2.7.14

您希望更改基础网格,使绘图具有不同的大小。不同的限制将作为网格单元大小之间的比率

然后,您仍然需要调整图形大小以获得良好的间距,并设置最后一个子图的纵横比,这与1不同

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec

lim1 = [0.,30.]
lim2 = [0.,15.]
lim3 = [0.,75.]
lim4 = [0,5]
xdat = [12.,25.]
ydat = [6.,12.]
zdat = [50.,25.]
cdat = [1,1]

gskw = dict(width_ratios = [np.diff(lim1)[0],np.diff(lim3)[0]],
            height_ratios= [np.diff(lim2)[0],np.diff(lim3)[0]])

gs = matplotlib.gridspec.GridSpec(2,2, **gskw)

fig = plt.figure(figsize=(6,5))

ax1=fig.add_subplot(gs[0,0], aspect="equal",adjustable='box-forced')
ax1.plot(xdat,ydat,'o')

ax2=fig.add_subplot(gs[0,1], aspect="equal",adjustable='box-forced', sharey=ax1)
ax2.plot(zdat,ydat,'o') 

ax3=fig.add_subplot(gs[1,0], aspect="equal",adjustable='box-forced', sharex=ax1)
ax3.plot(xdat,zdat,'o')

asp, = np.diff(lim4)/np.diff(lim3)
ax4=fig.add_subplot(gs[1,1], aspect=asp)
ax4.plot(cdat,zdat,'o')

ax1.set_xlim(lim1)
ax1.set_ylim(lim2)
ax2.set_xlim(lim3)
ax3.set_ylim(lim3)
ax4.set_xlim(lim4)
ax4.set_ylim(lim3)

plt.show()

我想“相同规模”确实会过度约束系统。除此之外,代码按预期工作,那么您希望情节看起来如何?@ImportanceOfBeingErnest“过度约束系统”是什么意思?顺便说一句,我刚刚更新了我的问题,包括一幅图的大致外观。您显示的图的纵横比不相等。因此,如果删除关于相等纵横比的约束,则绘图看起来很好。@ImportanceOfBeingErnest绘图的纵横比并不相等,因为我删除了该约束(aspect='equal'),只是为了显示子绘图轴应如何共享。但我需要这个约束来保持子地块轴上的相同比例。能不能画出一幅你想象中的绘图的图像?谢谢!这正是我要找的。