2016-02-05 4 views
3

У меня есть DataFrame со следующей структурой:Seaborn FacetGrid barplots и Оттенок

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 ошибается, я могу исправить это): 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

Столбики сложены друг перед другом, а распространяясь по всему интервалу. Что мне здесь не хватает?

Я создал gist с набором данных.

+1

Вам нужно передать 'hue' в' map' call, но лучше использовать 'factorplot'. – mwaskom

+0

@mwaskom с использованием 'factorplot' сделал трюк, возможно, вы хотите добавить это как ответ – plablo09

ответ

3

Поскольку 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

+0

Да, я также поймал это перекрытие, но ваше решение стало более элегантным – plablo09

Смежные вопросы