Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python seaborn FaceGrid,按行和列分开排列的条形图_Python_Seaborn - Fatal编程技术网

Python seaborn FaceGrid,按行和列分开排列的条形图

Python seaborn FaceGrid,按行和列分开排列的条形图,python,seaborn,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 = 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')
这是可行的,但我如何添加:

  • 有序x轴
  • 仅按计数显示前两个
    alrmV
    类型
  • 为了获得显示前2种计数类型的有序x轴,我使用了此分组,但无法将其放入镶嵌面网格中:

    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个计数?

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

    import seaborn as sns
    tips = sns.load_dataset("tips")
    
    我们将使用
    day
    作为条形图的
    x
    变量,在列中绘制
    sex
    ,在行中绘制
    smoker
    。为了把前两天安排好,我们可以

    top_two_ordered = tips.day.value_counts().order().index[-2:]
    
    然后,您可以将此列表传递到
    barplot
    x\u order
    参数

    虽然您可以在此处直接使用
    FaceGrid
    ,但使用
    factorplot
    功能可能更容易:

    g = sns.factorplot("day", col="sex", row="smoker",
                   data=tips, margin_titles=True, size=3,
                   x_order=top_two_ordered)
    
    其中:

    虽然我不建议完全按照您的建议(在每个方面为不同的x值绘制条形图),但可以通过执行以下操作来实现

    g = sns.FacetGrid(tips, col="sex", row="smoker", sharex=False)
    
    def ordered_barplot(data, **kws):
        x_order = data.day.value_counts().order().index[-2:]
        sns.barplot(data.day, x_order=x_order)
    
    g.map_dataframe(ordered_barplot)
    
    使


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

    import seaborn as sns
    tips = sns.load_dataset("tips")
    
    我们将使用
    day
    作为条形图的
    x
    变量,在列中绘制
    sex
    ,在行中绘制
    smoker
    。为了把前两天安排好,我们可以

    top_two_ordered = tips.day.value_counts().order().index[-2:]
    
    然后,您可以将此列表传递到
    barplot
    x\u order
    参数

    虽然您可以在此处直接使用
    FaceGrid
    ,但使用
    factorplot
    功能可能更容易:

    g = sns.factorplot("day", col="sex", row="smoker",
                   data=tips, margin_titles=True, size=3,
                   x_order=top_two_ordered)
    
    其中:

    虽然我不建议完全按照您的建议(在每个方面为不同的x值绘制条形图),但可以通过执行以下操作来实现

    g = sns.FacetGrid(tips, col="sex", row="smoker", sharex=False)
    
    def ordered_barplot(data, **kws):
        x_order = data.day.value_counts().order().index[-2:]
        sns.barplot(data.day, x_order=x_order)
    
    g.map_dataframe(ordered_barplot)
    
    使


    好的,是否可以获得每个性别的子组值计数?所以如果男性在周一,周二吸烟更多。。。你能通过某种方式传递分组值吗?不,不能通过seaborn。我认为这将是一个令人困惑的情节。嗯,这不完全是真的。你可以做到这一点,但我不推荐。请参见编辑以回答。--谢谢!(试图为轴标签设置(rot=10)……运气不好,我如何旋转轴标签?-如果这是一个简单的问题,很抱歉,但找不到它)如果你指的是xticklabels,你可以做
    g.set\u xticklabels(rotation=10)
    ,尽管这只会做最下面一行(我猜这实际上是一个bug)。对于其他内容,您需要在
    g.axes
    处循环遍历轴数组,并像在matplotlib中一样更改它们。好的,是否可以获得每个性别的子组值计数?所以如果男性在周一,周二吸烟更多。。。你能通过某种方式传递分组值吗?不,不能通过seaborn。我认为这将是一个令人困惑的情节。嗯,这不完全是真的。你可以做到这一点,但我不推荐。请参见编辑以回答。--谢谢!(试图为轴标签设置(rot=10)……运气不好,我如何旋转轴标签?-如果这是一个简单的问题,很抱歉,但找不到它)如果你指的是xticklabels,你可以做
    g.set\u xticklabels(rotation=10)
    ,尽管这只会做最下面一行(我猜这实际上是一个bug)。对于其他内容,您需要在
    g.axes
    处循环遍历轴数组,并像在matplotlib中通常那样更改它们。在此处为安装了>0.9.0的其他人添加注释,您可能会发现解决方案的帮助在此处为安装了>0.9.0的其他人添加注释,您可能会发现解决方案的帮助