使用不同的变量为子图和颜色绘制pandas图表?

5

目前这段代码:

count_df = (df[['rank', 'name', 'variable', 'value']]
    .groupby(['rank', 'variable', 'name'])
    .agg('count')
    .unstack())
count_df .head()
#               value                          
# name           1lin STH_km27_lin ST_lin S_lin
# rank variable                                
# 1.0  NEE         24          115     33    28
#      Qg          23           54     14     9
#      Qh          37          124     11    28
# ...
count_df.plot(kind='bar')

得到这个情节:

bar plot with too much shit on it

.plot()调用中使用subplots=True会得到这样的结果:

useless subplots

这段代码有些无用,因为颜色映射到与子图分面相同的变量。有没有办法选择用于子图绘制的列/索引,以便我仍然可以按namecount_df列标题)进行着色,但是按variable进行子图分面,以便每个子图都有一个name/rank条形图,按rank分组,并按name进行着色?
1个回答

2

嗯,我怀疑在pandas中单独完成这个任务可能不太可行,但我找到了一种在Seaborn中实现它的方法:

import seaborn as sns

cdf = (df[['rank', 'name', 'variable', 'value']]
           .groupby(['rank', 'variable', 'name'])
           .agg('count'))
sns.factorplot(x="rank", y="value", row="variable", hue="name",
               data=cdf.reset_index(), kind='bar')

这将导致以下结果:

按排名、变量和名称绘制的条形图

这对我的目的来说足够接近了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接