Matplotlib subplot2grid在设置gridspec_kw width_比率时删除子地块
我正在尝试制作一个包含子地块的网格,其中一个轴跨越两个网格位置。我可以通过Matplotlib subplot2grid在设置gridspec_kw width_比率时删除子地块,matplotlib,Matplotlib,我正在尝试制作一个包含子地块的网格,其中一个轴跨越两个网格位置。我可以通过plt.subplot、gridspec\u kw和plt.subplot2grid轻松实现这一点: import matplotlib.pyplot as plt fig, ax = plt.subplots(2,3,sharex=True, sharey=True, gridspec_kw={'width_ratios':[1,1,0.8]}) axi = plt.subplot2grid((2,3),(0,2),ro
plt.subplot
、gridspec\u kw
和plt.subplot2grid
轻松实现这一点:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2,3,sharex=True, sharey=True, gridspec_kw={'width_ratios':[1,1,0.8]})
axi = plt.subplot2grid((2,3),(0,2),rowspan=2)
plt.show()
但是,我希望右侧的跨越轴更窄。当我将宽度\u比率
更改为[1,1,0.5]
时,我得到以下结果:
其他轴怎么了?基于,我可以直接使用GridSpec
实现我想要的,而不是使用方便的包装:
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
fig = plt.figure()
gs = GridSpec(nrows=2, ncols=3, width_ratios=[1,1,0.5])
ax0 = plt.subplot(gs[0,0])
ax1 = plt.subplot(gs[0,1],sharey=ax0)
ax2 = plt.subplot(gs[1,0],sharex=ax0)
ax3 = plt.subplot(gs[1,1],sharex=ax1,sharey=ax2)
ax4 = plt.subplot(gs[:,2])
[plt.setp(z.get_yticklabels(),visible=False) for z in [ax1,ax3]]
[plt.setp(z.get_xticklabels(),visible=False) for z in [ax0,ax1]]
plt.show()
虽然这是可行的,但是手动设置一切都是很乏味的,尤其是当我只需要两行代码就可以完成的时候。有没有人想过如何使用
子绘图
/子绘图2网格
来完成这项工作,或者我一直在做这项工作?这值得在GitHub上做一个问题报告吗?要报告的问题可能与您想象的不同。我刚刚创建了一个
工作代码与GridSpec
(这肯定是一个有效且良好的解决方案)的等效方法是使用fig.add_subplot
而不是plt.subplot2grid
,并从初始网格中移除两个不需要的轴
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2,3,sharex=True, sharey=True, gridspec_kw={'width_ratios':[1,1,0.8]})
axi = fig.add_subplot(133)
for a in ax[:,2]:
a.axis("off")
plt.show()
多亏了你,我才明白这一点。在
fig, ax = plt.subplots(2,3,sharex=True, sharey=True, gridspec_kw={'width_ratios':[1,1,0.5]})
根据需要设置轴的宽度。然而,当我想要的行为
axi = plt.subplot2grid((2,3),(0,2),rowspan=2)
要跨越现有子地块的整个第三列,实际上它创建了一个新的虚拟2x3
网格,其宽度比[1,1,1]
,并写入跨越此新网格右列的轴。因为这个新的右栏是地物宽度的1/3,所以它与原始子地块的中心栏部分重叠,导致它们消失
解决方案是,为了保持这两行代码,更改subplot2grid
调用以模拟所需的宽度比:
axi = plt.subplot2grid((2,5),(0,4),rowspan=2)
我通过转换原始的width\u比率
vector:2*[1,1,0.5]=[2,2,1]
和sum([2,2,1])=5,得到了网格的5列。基本上,由于subplot2grid
不知道subplots
中指定的width\u比率
,因此必须强制它与新的网格计算相适应
这是可行的,但需要调整。问题在于fig.add_子图(133)
基于整个图形生成规则网格,因此忽略了gridspec宽度比。如果您将宽度\u比率
更改为[1,1,2]
或[1,1,0.3]
,您就会明白我的意思。为了使此方法起作用,例如在width\u ratio=[1,1,0.5]
的情况下,您必须计算子批次
调用的值,以便所有内容都对齐。在这种情况下,它将是fig.add_子图(155)
,因为2*[1,1,0.5]=[2,2,1]
和sum([2,2,1])=5
。我将接受此更新的答案!当然,如果你需要的话,请随时更新答案。我刚刚意识到我对你答案的建议实际上适用于我原来的问题,所以我将只做一个新的答案。谢谢你的帮助!