[英]python facetgrid with sns.barplot and map; target no overlapping group bars
我当前正在用带有两个不同组(“类型”)的条形图子图来为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()
数据是熊猫长格式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']}
)
现在,在创建的条形图中,我得到了两组完全重叠的条形图,因此缺少了ctrlis,请参见下文。 但是,我打算分别获得相邻的不重叠的条。 如何实现呢? 我的真实代码每个图都有更多条形,您可以在其中看到重叠的颜色(此处已完全覆盖)
我想您想将hue
参数提供给barplot,而不是FacetGrid。 因为分组是在(单个)barplot中进行的,而不是在构面的级别上进行的。
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()
这个答案显示了如何直接使用FacetGrid。
但是,如果您安装了0.9.0,我建议您使用新的catplot()
函数 ,该函数将生成正确的(至少我认为是)绘图。 请注意,此函数返回FacetGrid
对象。 您可以将kwargs传递给调用以自定义生成的FacetGrid
,或此后修改其属性。
g = sns.catplot(data=data, x='A', y='B', hue='type', col='C', kind='bar')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.