如何在matplotlib的一个图中从熊猫数据框添加多个条形图?

伊姆·温杜斯

我有两个不同的数据框:

df_test1 = pd.DataFrame(
    [['<18', 80841], ['18-24', 334725], ['25-44', 698261], ['45-64', 273087], ['65+', 15035]],
    columns = ['age_group', 'total_arrests']
)

在此处输入图片说明

df_test2 = pd.DataFrame(
    [['<18', 33979], ['18-24', 106857], ['25-44', 219324], ['45-64', 80647], ['65+', 4211]],
    columns = ['age_group','total_arrests']
)

在此处输入图片说明

我使用matplotlib创建了以下图:

fig, ax = plt.subplots()

ax.bar(df_test1.age_group, df_test1.total_arrests, color = 'seagreen')
ax.bar(df_test2.age_group, df_test2.total_arrests, color = 'lightgreen')
ax.set_xlabel('Age Group')
ax.set_ylabel('Number of Arrests')
ax.set_title('Arrests vs. Felony Arrests by Age Group')
plt.xticks(rotation=0)
plt.legend(['All Arressts', 'Felony Arrests'])

ax.yaxis.set_major_formatter(
ticker.FuncFormatter(lambda y,p: format(int(y), ','))
)

for i,j in zip(df_test1.age_group, df_test1.total_arrests):
    ax.annotate(format(j, ','), xy=(i,j))

for i,j in zip(df_test2.age_group, df_test2.total_arrests):
    ax.annotate(format(j, ','), xy=(i,j))

plt.show()

在此处输入图片说明

我期待2个独立的杆,一个用于每个数据帧列,df_test1.total_arrests并且df_test2.total_arrests而是我有一个堆积条形图。我怎样才能得到一张条形图彼此相邻的图表,类似于Matplotlib在一个图中绘制多个条形图在该示例中,我尝试将代码调整为该代码,但无法获取。

朝日朝日

只有两个酒吧,这很容易。解决方案是将刻度线的“边缘”上的条对齐,一个条向左对齐,另一条向右对齐。

重复相同的逻辑以正确对齐注释。其中一半左对齐,其他右对齐

fig, ax = plt.subplots()

ax.bar(df_test1.age_group, df_test1.total_arrests, color = 'seagreen', width=0.4, align='edge')
ax.bar(df_test2.age_group, df_test2.total_arrests, color = 'lightgreen', width=-0.4, align='edge')
ax.set_xlabel('Age Group')
ax.set_ylabel('Number of Arrests')
ax.set_title('Arrests vs. Felony Arrests by Age Group')
plt.xticks(rotation=0)
plt.legend(['All Arressts', 'Felony Arrests'])
ax.yaxis.set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda y,p: format(int(y), ','))
)

for i,j in zip(df_test1.age_group, df_test1.total_arrests):
    ax.annotate(format(j, ','), xy=(i,j))

for i,j in zip(df_test2.age_group, df_test2.total_arrests):
    ax.annotate(format(j, ','), xy=(i,j), ha='right')

plt.show()

在此处输入图片说明

如果您的条形超过2条,则情况会更加复杂(请参见上面链接的代码)。使用会更轻松seaborn,但是您必须对数据框进行一些转换:

df = pd.merge(left=df_test1, right=df_test2, on='age_group')

df.columns=['age_group','all_arrests', 'felonies']
df = df.melt(id_vars=['age_group'], var_name='Type', value_name='Number')

fig, ax = plt.subplots()
sns.barplot(y='Number',x='age_group',hue='Type', data=df, hue_order=['felonies','all_arrests'])

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在一个图中叠加多个图类型(条形图+散点图),共享x轴

如何在 Matplotlib 的子图中添加多个条形图

如何在matplotlib的条形图中添加多个数据标签

如何在matplotlib熊猫中的一个图中组合两个文件的两个条形图

如何从一个数据框中绘制多个带有填充条形图的堆叠条形图

在一个条形图中创建多个条形图

如何在条形图的每个条形上方添加一个额外的数字

一张图中来自不同数据框的两个条形图(一个公共列)

如何向条形图添加多个注释

只有一个数据时如何设置matplotlib条形图宽度

Plotly(python):如何在条形图中添加多个文本标签

Matplotlib在一张图中绘制多个条形图

熊猫将数据框绘制为多个条形图

来自多个数据框的熊猫条形图

如何在条形图的第一个条形上添加一条线?

如何在熊猫数据框中的每一列中绘制唯一值的数量作为条形图?

如何使用 matplotlib 在一个条形图上添加两个数据集

如何在ggplot中的一个条形图中使用2个不同变量的柱形图

一个条形图中的多个条形

如何在 Matplotlib 图中单独标记条形图?

如何在一个视图中添加多个集合视图

Qt条形图在一个图中包含多个系列

ggplot 条形图将多个值显示为一个图中的标签

如何在日期上合并数据框列表以制作条形图?熊猫蟒

如何在同一图中为多个变量获取几个水平条形图

如何在matplotlib中为条形图着色的列表变量中重复一个值?

如何使用matplotlib从三个不同的数据框中绘制条形图?

如何在 d3.js 中更改条形图的一个条形图?

matplotlib 条形图显示一个额外的值