我正在尝试创建一个类似于来自的情节 this question
为什么我只获得两个面板,即只是gs2:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
def main():
fig = plt.figure()
gs1 = gridspec.GridSpec(1,4)
gs2 = gridspec.GridSpec(2,4)
for n in range(4):
ax00 = plt.subplot(gs1[0,n])
ax10 = plt.subplot(gs2[0,n])
ax11 = plt.subplot(gs2[1,n])
ax00.plot([0,0],[0,1*n],color='r')
ax10.plot([0,1],[0,2*n],color='b')
ax11.plot([0,1],[0,3*n],color='g')
plt.show()
main()
给了我这个:
最后我想得到一个像:
的数字我使用问题末尾的代码获得的。但是我希望得到gs2.update(hspace=0)
给出的图的可移动性(我尝试使用gridspec的原因)。即我想删除最后一行和第二行之间的空格。
def whatIwant():
f, axarr = plt.subplots(3,4)
for i in range(4):
axarr[0][i].plot([0,0],[0,1*i],color='r')
axarr[1][i].plot([0,1],[0,2*i],color='b') #remove the space between those and be able to move the plots where I want
axarr[2][i].plot([0,1],[0,3*i],color='g')
plt.show()
答案 0 :(得分:2)
这确实是其中一种情况,使用GridSpecFromSubplotSpec
是有意义的。也就是说,您将创建一个整体GridSpec
,其中包含一列和两行(以及1到2的高度比)。在第一行中,您将GridSpecFromSubplotSpec
放置一行和四列。在第二行中,您将放置一行有两行和四列,另外指定一个hspace=0.0
,使得两个底行之间没有任何间距。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
gs = gridspec.GridSpec(2, 1, height_ratios=[1,2])
gs0 = gridspec.GridSpecFromSubplotSpec(1, 4, subplot_spec=gs[0], wspace=0.4)
gs1 = gridspec.GridSpecFromSubplotSpec(2, 4, subplot_spec=gs[1], hspace=0.0, wspace=0.4)
for n in range(4):
ax00 = plt.subplot(gs0[0,n])
ax10 = plt.subplot(gs1[0,n])
ax11 = plt.subplot(gs1[1,n], sharex=ax10)
plt.setp(ax10.get_xticklabels(), visible=False)
ax00.plot([0,0],[0,1*n],color='r')
ax10.plot([0,1],[0,2*n],color='b')
ax11.plot([0,1],[0,3*n],color='g')
plt.show()
此解决方案的优势与链接问题答案中的优势相反,即您不会重叠GridSpecs,因此无需考虑它们之间的相互关系。
<小时/> 如果您仍然对问题代码无效的原因感兴趣:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
def main():
fig = plt.figure()
gs1 = gridspec.GridSpec(3,4)
gs2 = gridspec.GridSpec(3,4, hspace=0.0)
for n in range(4):
ax00 = plt.subplot(gs1[0,n])
ax10 = plt.subplot(gs2[1,n])
ax11 = plt.subplot(gs2[2,n])
ax00.plot([0,0],[0,1*n],color='r')
ax10.plot([0,1],[0,2*n],color='b')
ax11.plot([0,1],[0,3*n],color='g')
plt.show()
main()