Seaborn FacetGrid 条形图和色调

Posted

技术标签:

【中文标题】Seaborn FacetGrid 条形图和色调【英文标题】:Seaborn FacetGrid barplots and hue 【发布时间】:2016-05-15 19:21:20 【问题描述】:

我有一个具有以下结构的 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

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

制作两个条形图非常简单:

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

这会产生(我知道 xlabels 是错误的,我可以更正):

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

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

但这会产生:

这些条相互堆叠,而不是分布在整个间隔中。我在这里错过了什么?

我用数据集创建了一个gist。

【问题讨论】:

map调用中需要传递hue,但最好使用factorplot @mwaskom 使用 factorplot 成功了,也许您想将其添加为答案 【参考方案1】:

因为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)

【讨论】:

以上是关于Seaborn FacetGrid 条形图和色调的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

Seaborn FacetGrid - 在最后一个子图之后放置单个颜色条

如何在具有不同 Y 轴的同一个 seaborn 图中很好地制作条形图和线图?

seaborn 的 lmplot 的输出没有绘制散点图和线性回归

如何将单个 vlines 添加到 seaborn FacetGrid 的每个子图

如何在seaborn barplot中使用NaN值作为具有定义颜色的色调