matplotlib,在x轴上添加多个子图的常见水平线

时间:2014-05-01 17:26:30

标签: python matplotlib grid line horizontal-line

我的计划是有4 GridSpec(4,1)个gridspecs来创建一个4x4网格的子图。我想在每个4个子图的行的x轴上添加一条水平线。我查看了matplotlib.lines.Line2D,但无法弄明白。有什么建议?我试图在视觉上简化图片,因此它看起来不像16个独立的图形。

在下面的图片中,我只有前2个网格规格,但我希望它能更好地了解我希望实现的目标。

谢谢!干杯

代码(图形部分):

#---the graph---
fig = plt.figure(facecolor='white')

gs1 = GridSpec(4,1)
gs1.update(left = 0.15, right = .3375 , wspace=0.02)

ax1 = plt.subplot(gs1[3,0])
ax2 = plt.subplot(gs1[2,0])
ax3 = plt.subplot(gs1[1,0])
ax4 = plt.subplot(gs1[0,0])



gs2 = GridSpec(4,1)
gs2.update(left = 0.3875, right = .575, wspace=.25)

ax1 = plt.subplot(gs2[3,0])
ax2 = plt.subplot(gs2[2,0])
ax3 = plt.subplot(gs2[1,0])
ax4 = plt.subplot(gs2[0,0])


show()

enter image description here

1 个答案:

答案 0 :(得分:1)

基本上我的想法是画一条线并允许线延伸到轴的当前视图之外,在下面的示例中,我将该线绘制成红色以便更好地看到它。

此外,您的8个图可以在嵌套循环中绘制,这将更好地组织代码并使这个“跨子图的公共线”更容易实现:

X=[1,3,4,5]
Y=[3,4,1,3]
L=['A', 'B', 'C', 'D']
f=plt.figure(figsize=(10,16), dpi=100)
gs1 = gridspec.GridSpec(4,1)
gs1.update(left = 0.15, right = .3375 , wspace=0.02)
gs2 = gridspec.GridSpec(4,1)
gs2.update(left = 0.3875, right = .575, wspace=.25)
sp1 = [plt.subplot(gs1[i,0]) for i in range(4)]
sp2 = [plt.subplot(gs2[i,0]) for i in range(4)]
for sp in [sp1, sp2]:
    for ax in sp:
        ax.bar(range(len(L)), X, 0.35, color='r')
        ax.bar(np.arange(len(L))+0.35, Y, 0.35)
        ax.spines['right'].set_visible(False)
        ax.yaxis.set_ticks_position('left')
        ax.spines['top'].set_visible(False)
        ax.xaxis.set_ticks_position('bottom')
        if sp==sp1:
            ax.axis(list(ax.get_xlim())+list(ax.get_ylim())) #set the axis view limit
            ll=ax.plot((0,10), (0,0), '-r') #Let's plot it in red to show it better
            ll[0].set_clip_on(False) #Allow the line to extend beyond the axis view
plt.savefig('temp.png')            

enter image description here