首页 > 解决方案 > 并排的两个具有不同比例的条形图

问题描述

我正在使用以下 matplotlib 代码并排创建两个条形图。但它们的尺度不同。我想删除不需要的白色区域。

action_number = [5, 6, 6, 6, 8, 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                5, 6, 6, 6, 8, 8, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
action_list = ['DrawSword', 'Kiss', 'RideBike', 'Dribble', 'Hug', 'Dive', 
               'Cartwheel', 'Drink', 'Climb', 'Eat', 'Walk', 'FallFloor', 
               'Stand', 'Sword', 'Pick', 'SwingBaseb', 'Handstand', 'ShootBow',
               'DrawSword', 'Kiss', 'RideBike', 'Dribble', 'Hug', 'Dive', 
               'Cartwheel', 'Drink', 'Climb', 'Eat', 'Walk', 'FallFloor', 
               'Stand', 'Sword', 'Pick', 'SwingBaseb', 'Handstand', 'ShootBow']

def bar_plot(action_list, action_number, ax):
    y_pos = np.arange(len(action_list))

    ax.barh(y_pos, action_number, height=0.75, align='center', color='b')
    ax.set_yticks(y_pos)
    ax.set_yticklabels(action_list)

    ax.invert_yaxis()

    ax.tick_params(labelsize=12, which='both', axis='both')

    ax.yaxis.set_ticks_position('left')
    ax.xaxis.set_ticks_position('bottom')

    plt.autoscale(tight=True)
    plt.tight_layout()

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 10))
fig.subplots_adjust(wspace=0, hspace=0)
bar_plot(action_list, action_number, ax1)
bar_plot(action_list, action_number, ax2)
plt.savefig('action_attribute_sidebyside.pdf',bbox_inches="tight", pad_inches=0)

这是代码生成的图。我在红色框中突出显示不需要的白色区域。 matpl

标签: pythonmatplotlib

解决方案


删除plt.autoscaleplt.tight_layout退出bar_plot

def bar_plot(action_list, action_number, ax):
    y_pos = np.arange(len(action_list))

    ax.barh(y_pos, action_number, height=0.75, align='center', color='b')
    ax.set_yticks(y_pos)
    ax.set_yticklabels(action_list)

    ax.invert_yaxis()

    ax.tick_params(labelsize=12, which='both', axis='both')

    ax.yaxis.set_ticks_position('left')
    ax.xaxis.set_ticks_position('bottom')

    # set the limits manually
    ax.set_ylim(-.5, len(action_list)-0.5)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 10))
fig.subplots_adjust(wspace=0, hspace=0)
bar_plot(action_list, action_number, ax1)
bar_plot(action_list, action_number, ax2)

plt.tight_layout()

输出:

在此处输入图像描述


推荐阅读