seaborn FacetGrid,在行和col上分开排列的barplot

时间:2014-04-23 11:16:07

标签: python seaborn

给出一些数据:

pt = pd.DataFrame({'alrmV':[000,000,000,101,101,111,111],
                   'he':[e,e,e,e,h,e,e],
                   'inc':[0,0,0,0,0,1,1]})

我想创建一个以行和列分隔的条形图。

g = sns.FacetGrid(pt, row='inc', col='he', margin_titles=True)
g.map( sns.barplot(pt['alrmV']), color='steelblue')

这个有用,但我怎么也添加:

  1. 有序的x轴
  2. 仅显示排名前两位的alrmV类型
  3. 要获得一个有序的x轴,它显示前2种计数类型,我玩这个分组,但无法将其放入Facet网格中:

    grouped = pt.groupby( ['he','inc'] )
    grw= grouped['alrmV'].value_counts().fillna(0.) #.unstack().fillna(0.)
    grw[:2].plot(kind='bar')
    

    使用FacetGrid,切片会限制显示的总计数

    g.map(sns.barplot(pt['alrmV'][:10]), color='steelblue')
    

    那么我怎样才能得到一个条形图,它在行和列上分开,并且是有序的,只显示前2个计数?

1 个答案:

答案 0 :(得分:4)

我无法使用您提供的数据示例,因此我将使用其中一个示例数据集来演示:

import seaborn as sns
tips = sns.load_dataset("tips")

我们将使用sex作为条形图的smoker变量,在行的day列中创建x的图表。为了按顺序排名前两天,我们可以做到

top_two_ordered = tips.day.value_counts().order().index[-2:]

然后,您可以将此列表传递给x_order的{​​{1}}参数。

虽然您可以直接使用barplot,但使用FacetGrid功能可能更容易:

factorplot

哪个绘制:

enter image description here

虽然我不建议您完全按照您的建议(在每个方面绘制不同x值的条形图),但可以通过执行类似

的操作来完成
g = sns.factorplot("day", col="sex", row="smoker",
               data=tips, margin_titles=True, size=3,
               x_order=top_two_ordered)

制作

enter image description here