Roc*_*bar 2 python bar-chart seaborn facet-grid
我目前正在分别为带有两个不同组(“类型”)的条形图子图实现 facetgrid 的代码。我打算得到一个情节,其中不同的组不堆叠也不重叠。我正在使用以下代码
g = sns.FacetGrid(data,
col='C',
hue = 'type',
sharex=False,
sharey=False,
size=7,
palette=sns.color_palette(['red','green']),
)
g = g.map(sns.barplot, 'A', 'B').add_legend()
Run Code Online (Sandbox Code Playgroud)
数据是具有以下示例结构的 Pandas 长格式 df:
data=pd.DataFrame({'A':['X','X','Y','Y','X','X','Y','Y'],
'B':[0,1,2,3,4,5,6,7],
'C':[1,1,1,1,2,2,2,2],
'type':['ctrl','cond1','ctrl','cond1','ctrl','cond1','ctrl','cond1']}
)
Run Code Online (Sandbox Code Playgroud)
在创建的条形图中,我现在得到了完全重叠的两组条形图,因此缺少 ctrlis,见下文。但是,我打算获得相邻的非重叠条。如何做到这一点?我的真实代码每个图都有更多条,您可以在其中看到重叠的颜色(此处完全覆盖)
我认为您想向条形图提供hue参数,而不是 FacetGrid。因为分组发生在(单个)条形图中,而不是在构面的级别上。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
data=pd.DataFrame({'A':['X','X','Y','Y','X','X','Y','Y'],
'B':[0,1,2,3,4,5,6,7],
'C':[1,1,1,1,2,2,2,2],
'type':['ctrl','cond1','ctrl','cond1','ctrl','cond1','ctrl','cond1']})
g = sns.FacetGrid(data,
col='C',
sharex=False,
sharey=False,
height=4)
g = g.map(sns.barplot, 'A', 'B', "type",
hue_order=np.unique(data["type"]),
order=["X", "Y"],
palette=sns.color_palette(['red','green']))
g.add_legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
这个答案显示了如何直接使用 FacetGrid。
但是,如果您安装了 0.9.0,我建议您使用能够生成正确(至少我认为?)情节的新catplot()功能。请注意,此函数返回一个FacetGrid对象。您可以将 kwargs 传递给调用以自定义结果FacetGrid,或之后修改其属性。
g = sns.catplot(data=data, x='A', y='B', hue='type', col='C', kind='bar')
Run Code Online (Sandbox Code Playgroud)