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
Seaborn FacetGrid barplots and hue
提问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):
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')
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 interval
is nested within the x
variable (segment
), you need to tell barplot
about all of the possible levels of the x
variable, 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)