python facetgrid与sns.barplot和地图;定位没有重叠的组栏

时间:2018-10-05 17:02:49

标签: python bar-chart seaborn facet-grid

我目前正在使用带有两个不同组(“类型”)的条形图子图来为facetgrid实现代码。我打算得到一个图,其中不同的组没有堆叠且不重叠。我正在使用以下代码

physiomeportal.min.js

数据是熊猫长格式df,具有以下示例结构:

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()

在创建的条形图中,我现在得到两组的完全重叠的条形图,因此缺少ctrlis,请参见下文。但是,我打算分别获得相邻的不重叠的条。如何实现呢?我的真实代码每个图都有更多条形,您可以在其中看到重叠的颜色(此处已完全覆盖)

enter image description here

2 个答案:

答案 0 :(得分:2)

this answer显示了如何直接使用FacetGrid。

但是,如果您安装了0.9.0,我建议您使用the new catplot() function,它将产生正确的(至少我认为是)绘图。请注意,此函数返回一个FacetGrid对象。您可以将kwargs传递给调用以自定义生成的FacetGrid,或之后修改其属性。

g = sns.catplot(data=data, x='A', y='B', hue='type', col='C', kind='bar')

enter image description here

答案 1 :(得分:1)

我认为您想提供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()

enter image description here