使用列设置条形颜色的数据框中的条形图

Barplot from a dataframe using a column to set the bar colors

我有一个数据框,例如(这是数据框的一个子集):

    Species     Pathway        Number of Gene Families
0   Glovio      ABC                    0.5
1   Glovio      ABC/Synthase           1.0
2   Glovio      Synthase               0.0
3   Glovio      Wzy                   10.0
4   Glovio      Wzy/ABC                0.0
5   n2          ABC                    2.0
6   n2          ABC/Synthase           0.0
7   n2          Synthase               13.0
8   n2          Wzy                    7.0
9   n2          Wzy/ABC                0.0
10  Glokil      ABC                    2.0
11  Glokil      ABC/Synthase           1.0
12  Glokil      Synthase               0.0
13  Glokil      Wzy                    4.0
14  Glokil      Wzy/ABC                0.0

我想绘制一个堆积条形图,其中每个条形对应于物种(x 轴)。 y 轴将显示基因家族的数量,按通路进行颜色编码。

我尝试过一些简单的事情,比如:

df[['Pathway']].plot(kind='bar', stacked=True)

但我收到一条错误消息:

Empty 'DataFrame': no numeric data to plot

有什么想法吗?

谢谢!

searborn中你可以在使用sns.barplot时指定一个hue变量,这将根据不同的级别决定条形的颜色:

sns.barplot(data=df, x='Species', y='NumberofGeneFamilies', hue='Pathway')

您可以在重塑数据框后执行此操作,例如:

df.groupby(['Species', 'Pathway'])['Number of Gene Families'].sum()\
  .unstack().plot(kind='bar', stacked=True)

或者 pivot_table 相同的结果:

df.pivot(index='Species', columns='Pathway', values='Number of Gene Families')\
  .plot(kind='bar', stacked=True )

我会做一个 set_index().unstack():

(df.set_index(['Species','Pathway'])
   ['Number of Gene Families']
   .unstack('Pathway')
   .plot.bar(stacked=True)
)

输出: