pandas Seaborn FacetGrid 条形图和色调

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/35230524/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 00:37:43  来源:igfitidea点击:

Seaborn FacetGrid barplots and hue

pythonpandasseaborn

提问by plablo09

I have a DataFrame with the following structure:

我有一个具有以下结构的 DataFrame:

interval    segment  variable        value
4   02:00:00      Night  weekdays   154.866667
5   02:30:00      Night  weekdays   100.666667
6   03:00:00      Night  weekdays    75.400000
7   03:30:00      Night  weekdays    56.533333
8   04:00:00      Night  weekdays    55.000000
9   04:30:00      Night  weekends    53.733333
10  05:00:00      Night  weekends    81.200000
11  05:30:00      Night  weekends   125.933333
14  07:00:00    Morning  weekdays   447.200000
15  07:30:00    Morning  weekends   545.200000
16  08:00:00    Morning  weekends   668.733333
17  08:30:00    Morning  weekends   751.333333
18  09:00:00    Morning  weekdays   793.800000
19  09:30:00    Morning  weekdays   781.125000
23  11:30:00       Noon  weekdays   776.375000
24  12:00:00       Noon  weekdays   741.812500
25  12:30:00       Noon  weekends   723.000000
26  13:00:00       Noon  weekends   734.562500
27  13:30:00       Noon  weekends   763.882353
28  14:00:00  Afternoon  weekdays   810.411765
31  15:30:00  Afternoon  weekdays   855.411765
32  16:00:00  Afternoon  weekdays   824.882353
33  16:30:00  Afternoon  weekends   768.529412
34  17:00:00  Afternoon  weekends   790.812500
35  17:30:00  Afternoon  weekends   809.125000

I want to produce a faceted grid of bar plots, one for each variable (weekdays/weekends) and then colour the bars according to the "segment" column.

我想生成一个多面的条形图网格,每个变量(工作日/周末)一个,然后根据“段”列为条形着色。

Producing the two bar plots is very straightforward:

生成两个条形图非常简单:

g = sns.FacetGrid(melted, col="variable")
g.map(sns.barplot,'interval','value')

This produces (I know the xlabels are wrong, I can correct that): enter image description here

这会产生(我知道 xlabels 是错误的,我可以更正): 在此处输入图片说明

I'm stuck at colouring the bars according to "segment". Per the docs, all I need to do is add the variable when instantiating the FacetGrid and set some palette:

我一直坚持根据“细分”为条形着色。根据文档,我需要做的就是在实例化 FacetGrid 时添加变量并设置一些调色板:

g = sns.FacetGrid(melted, col="variable",hue="segment",palette="Set3")
g.map(sns.barplot,'interval','value')

But this produces: enter image description here

但这会产生: 在此处输入图片说明

The bars are stacked in front of each other instead of being spread across the whole interval. What am I missing here?

酒吧在彼此的前面堆叠,而不是分布在整个间隔中。我在这里错过了什么?

I've created a gistwith the dataset.

我已经用数据集创建了一个要点

回答by mwaskom

Because intervalis nested within the xvariable (segment), you need to tell barplotabout all of the possible levels of the xvariable, so that they are not drawn on top of each other:

因为interval嵌套在x变量 ( segment) 中,您需要告知变量的barplot所有可能级别x,以便它们不会相互叠加:

times = df.interval.unique()
g = sns.FacetGrid(df, row="variable", hue="segment",
                  palette="Set3", size=4, aspect=2)
g.map(sns.barplot, 'interval', 'value', order=times)

enter image description here

在此处输入图片说明