Python:“挤压”子图中的特定图

时间:2015-04-07 21:32:12

标签: python pandas matplotlib plot

下面,我在Python中绘制下图:Figure

正如你所看到的那样,右边的情节要多得多,而且光滑的"比左边的那个。这是因为两个图上的x轴缩放都不同。左侧比右侧更多观察(约三倍以上)。因此,我怎样才能挤压"水平右边的情节,以便我对左边的那个有点近似的看法?下面是我的代码(我使用Pandas):

fig, axes = plt.subplots(1, 2, sharey=True, figsize=(30, 15))
        # plot the same data on both axes
        #gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1])
        ax1 = df1.plot(ax=axes[0], grid='off', legend=False,
                                       xticks=[-250, -200, -150, -100, -50,
                                               0, 25], lw=2, colormap='jet',
                                       fontsize=20)
        ax2 = df2.plot(ax=axes[1], grid='off', legend=False,
                                       xticks=[-5, 0, 20, 40, 60, 80], lw=2,
                                       colormap='jet', fontsize=20)
        # zoom-in / limit the view to different portions of the data
        # hide the spines between ax and ax2
        ax1.set_ylabel('Treatment-Control Ratio', fontsize=20)
        ax1.axhline(y=1, color='r', linewidth=1.5)
        ax2.axhline(y=1, color='r', linewidth=1.5)
        ax1.axvline(x=0, color='r', linewidth=1.5, linestyle='--')
        ax2.axvline(x=0, color='r', linewidth=1.5, linestyle='--')
        ax1.set_xlabel('Event Time - 1 Minute', fontsize=20)
        ax2.set_xlabel('Event Time - 1 Minute', fontsize=20)
        ax1.spines['right'].set_visible(False)
        ax2.spines['left'].set_visible(False)
        ax1.yaxis.tick_left()
        ax2.yaxis.set_major_locator(plt.NullLocator())
        ax1.tick_params(labeltop='off')  # don't put tick labels at the top
        plt.subplots_adjust(wspace=0.11)
        plt.tight_layout()

1 个答案:

答案 0 :(得分:1)

在@cphlewis和@gboffi的帮助下,我用下面的代码解决了这个问题:

fig, axes = plt.subplots(figsize=(30, 15))
        # plot the same data on both axes
        gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1.2]) 
        ax1 = plt.subplot(gs[0])
        ax2 = plt.subplot(gs[1], sharey=ax1)
        df_wpc.loc[-260:25].plot(ax=ax1, grid='off', legend=False,
                                       xticks=[-250, -200, -150, -100, -50,
                                               0, 25], lw=2, colormap='jet',
                                       fontsize=20)
        df_pc_et.loc[-5:91].plot(ax=ax2, grid='off', legend=False,
                                       xticks=[-5, 0, 20, 40, 60, 80], lw=2,
                                       colormap='jet', fontsize=20)
        ax1.set_ylabel('Treatment-Control Ratio', fontsize=20)
        ax1.axhline(y=1, color='r', linewidth=1.8)
        ax2.axhline(y=1, color='r', linewidth=1.8)
        ax1.axvline(x=0, color='r', linewidth=1.8, linestyle='--')
        ax2.axvline(x=0, color='r', linewidth=1.8, linestyle='--')
        ax1.set_xlabel('Event Time - 1 Minute', fontsize=20)
        ax2.set_xlabel('Event Time - 1 Minute', fontsize=20)
        ax1.spines['right'].set_visible(False)
        ax2.spines['left'].set_visible(False)
        ax1.yaxis.tick_left()
        ax2.yaxis.set_major_locator(plt.NullLocator())
        ax1.tick_params(labeltop='off')  # don't put tick labels at the top
        plt.subplots_adjust(wspace=0.7)
        plt.tight_layout()