如何管理Pandas中的子图?

时间:2018-05-07 15:01:43

标签: python pandas matplotlib

我的DataFrame是:

df = pd.DataFrame({'A': range(0,-10,-1), 'B': range(10,20), 'C': range(10,30,2)})

和情节:

df[['A','B','C']].plot(subplots=True, sharex=True)

我得到一个包含3个子图的列,每个图都是高度。

如何以这种方式绘制,我只有两个子图,其中'A'在上面一个,'B'和'C'在下面下图的高度不同于高度图'A'(x轴是共享的)?

3 个答案:

答案 0 :(得分:2)

使用subplotsgridspec_kw parmater设置网格,然后使用pandas图中的ax参数来使用子图语句中定义的那些轴:

f, ax = plt.subplots(2,2, gridspec_kw={'height_ratios':[1,2]})
df[['A','B','C']].plot(subplots=True, sharex=True, ax=[ax[0,0],ax[0,1],ax[1,0]])
ax[1,1].set_visible(False)

输出:

enter image description here

答案 1 :(得分:1)

为清楚起见,我在此处发布了修改后的代码:

f, ax = plt.subplots(2,1, sharex=True, gridspec_kw={'height_ratios':[1,3]})
f.subplots_adjust(hspace=0)
df[['A','B','C']].plot(subplots=True, ax=[ax[0],ax[1],ax[1]])

那就行了。感谢。

enter image description here

答案 2 :(得分:1)

我能够用.subplot2grid()做到这一点。根据需要只创建3个图。

ax1 = plt.subplot2grid((3, 2), (0, 0), colspan=1)
ax2 = plt.subplot2grid((3, 2), (0, 1), colspan=1)
ax3 = plt.subplot2grid((3, 2), (1, 0), rowspan=2, sharex=ax1)
plt.setp(ax1.get_xticklabels(), visible=False)

ax1.plot(df['A'])
ax2.plot(df['B'], color='darkorange')
ax3.plot(df['C'], color='green')

输出:

enter image description here