【问题标题】:Could not plot multiple horizontal bar side by side无法并排绘制多个水平条
【发布时间】:2019-02-05 18:11:34
【问题描述】:

我想绘制多个共享同一 y 轴的水平条形图。详细地说,我有 4 个数据框,每个数据框代表一个条形图。我想使用这些数据框在左侧绘制 2 个水平条形图,在右侧绘制另外 2 个。现在,我只能在左右显示一个水平条形图。以下是我想要的输出、代码和错误

data1 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [97, 75, 35, 19, 15, 13]
}

data2 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [98, 79, 38, 16, 15, 13]
}

data3 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [89, 52, 22, 16, 12, 13]
}

data4 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [95, 64, 27, 18, 15, 13]
}

df_male_1 = pd.DataFrame(data1)
df_male_2 = pd.DataFrame(data2)
df_female_1 = pd.DataFrame(data3)
df_female_2 = pd.DataFrame(data4)

fig, axes = plt.subplots(ncols=2, sharey=True, figsize=(12,12))

axes[0].barh(df_male_1['age'], df_male_1['single_value'], align='center', 
color='red', zorder=10)

axes[0].barh(df_male_2['age'], df_male_2['single_value'], align='center', 
color='blue', zorder=10)

axes[0].set(title='Age Group (Male)')

axes[1].barh(df_female_1['age'], df_female_1['single_value'], 
align='center', color='pink', zorder=10)

axes[1].barh(df_female_2['age'], df_female_2['single_value'], 
align='center', color='purple', zorder=10)

axes[1].set(title='Age Group (Female)')

axes[0].invert_xaxis()
axes[0].set(yticks=df_male_1['age'])
axes[0].yaxis.tick_right()

for ax in axes.flat:
    ax.margins(0.09)
    ax.grid(True)

fig.tight_layout()
fig.subplots_adjust(wspace=0.09)
plt.show()    

错误输出

【问题讨论】:

    标签: python pandas dataframe matplotlib bar-chart


    【解决方案1】:

    问题是目前您的条形相互重叠,因为它们默认为center 对齐。要获得所需的图形,您必须在边缘对齐它们。要使它们彼此相邻,您必须使用负高度和正高度(条的水平宽度)。可以根据需要选择height的值

    以下是修改后的代码(只显示相关部分)

    fig, axes = plt.subplots(ncols=2, sharey=True, figsize=(12,12))
    
    axes[0].barh(df_male_1['age'], df_male_1['single_value'], align='edge', height=0.3, 
                 color='red', zorder=10)
    
    axes[0].barh(df_male_2['age'], df_male_2['single_value'], align='edge', height=-0.3,
                 color='blue', zorder=10)
    
    axes[0].set(title='Age Group (Male)')
    
    axes[1].barh(df_female_1['age'], df_female_1['single_value'], align='edge',height=0.3, 
                 color='pink', zorder=10)
    
    axes[1].barh(df_female_2['age'], df_female_2['single_value'], align='edge', height=-0.3, 
                 color='purple', zorder=10)
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2019-05-29
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      相关资源
      最近更新 更多