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

时间:2020-05-19 16:51:14

标签: python pandas bar-chart seaborn stacked-chart

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

    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

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

searborn中,您可以使用sns.barplot指定一个hue变量,该变量将根据不同的级别确定条形的颜色:

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

enter image description here

答案 1 :(得分:1)

您可以在调整数据框形状后执行以下操作:

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

enter image description here

或具有与pivot_table相同的结果:

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

答案 2 :(得分:0)

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

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

输出:

enter image description here