我有以下dataframe
import pandas as pd
df = pd.DataFrame({'reg' : ['A', 'B', 'C'],
'file': ['1', '1', '2'],
'val' : [1, 2, 3]})
我想使用barplot
创建一个seaborn
,用faceting
创建file
,用reg
着色,并添加val
在每个栏的顶部
我已经尝试过了
import seaborn as sns
g = sns.FacetGrid(df, col='file', hue='reg', col_wrap=2)
g.map(sns.barplot, 'reg', 'val').add_legend()
g.savefig('test_so.png')
但是,这不能正确着色
有什么想法吗?
答案 0 :(得分:2)
您需要order
参数,在下面的@jdehesa中添加unique
:
g = sns.FacetGrid(df, col='file', hue='reg', col_wrap=2)
g.map(sns.barplot, 'reg', 'val', order=df.reg.unique()).add_legend()
输出:
g = sns.FacetGrid(df, col='file', hue='reg', col_wrap=2)
g.map(sns.barplot, 'reg', 'val', order=df.reg.unique()).add_legend()
for ax in g.axes:
for p in ax.patches:
ax.annotate("%.2f" % p.get_height(), (p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='center', fontsize=11, color='black', xytext=(0, 5),
textcoords='offset points')