2017-07-07 199 views
1

我想绘制一个2乘3设置(即2行3列)的5个数据帧。这是我的代码:然而,我想摆脱它的第六位(第二行和第三列)有一个额外的空图。我想知道如何删除它,以便在第一行有两个地块,第二行有两个地块。删除matplotlib子图中的多余图块

import matplotlib.pyplot as plt 
fig, axes = plt.subplots(nrows=2, ncols=3) 

fig.set_figheight(8) 
fig.set_figwidth(15) 



df[2].plot(kind='bar',ax=axes[0,0]); axes[0,0].set_title('2') 

df[4].plot(kind='bar',ax=axes[0,1]); axes[0,1].set_title('4') 

df[6].plot(kind='bar',ax=axes[0,2]); axes[0,2].set_title('6') 

df[8].plot(kind='bar',ax=axes[1,0]); axes[1,0].set_title('8') 

df[10].plot(kind='bar',ax=axes[1,1]); axes[1,1].set_title('10') 

plt.setp(axes, xticks=np.arange(len(observations)), xticklabels=map(str,observations), 
     yticks=[0,1]) 

fig.tight_layout() 

Plots

回答

5

试试这个:

fig.delaxes(axes[1][2]) 

一个更灵活的方法来创建次要情节是fig.add_axes()方法。这些参数是矩形坐标列表:fig.add_axes([x,y,xsize,ysize])。这些值是相对于画布大小的,所以0.5的xsize意味着子图具有窗口宽度的一半。

+0

谢谢。有效。你知道如何将这两块地块移到中心吗? – HimanAB

+0

如果你想要一个普通网格以外的子图布局,通常使用'fig.add_axes()'方法更容易。它采用矩形的坐标(作为列表)并返回单个轴对象。坐标是相对于窗口大小的。 Il在我的回答中举了一个例子。 – Johannes

+0

使用'add_axes'既不是一种非常好也不推荐的生产子图的方式。无论是'plt.subplots'还是'Gridspec'都可以去,'delaxes'或'ax.axis(“off”)'可以用来删除或隐藏子图。 – ImportanceOfBeingErnest