web-dev-qa-db-ja.com

SeabornFacetGridのバープロットと色相

次の構造の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

変数(平日/週末)ごとに1つずつ、棒グラフのファセットグリッドを作成し、「セグメント」列に従って棒に色を付けたいと思います。

2つの棒グラフの作成は非常に簡単です。

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

これにより、(xlabelsが間違っていることがわかっているので、修正できます): enter image description here

「セグメント」に従ってバーを色付けすることに固執しています。ドキュメントによると、FacetGridをインスタンス化するときに変数を追加し、パレットを設定するだけです。

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

しかし、これは以下を生成します: enter image description here

バーは、間隔全体に広がるのではなく、互いの前に積み重ねられます。ここで何が欠けていますか?

データセットを使用して 要点 を作成しました。

10
plablo09

intervalx変数(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

14
mwaskom