使用列设置条形颜色的数据框中的条形图
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)
)
输出:
我有一个数据框,例如(这是数据框的一个子集):
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)
)
输出: