сетка граней питона с sns.barplot и картой;цель не перекрывающихся групповых баров - PullRequest
0 голосов
/ 05 октября 2018

В настоящее время я реализую код для фазовой сетки с подзаговорами графиков с двумя разными группами ('тип'), соответственно.Я намерен получить сюжет, где разные группы не сложены и не перекрываются.Я использую следующий код

g = sns.FacetGrid(data,
            col='C',
            hue = 'type',
            sharex=False,
            sharey=False,
            size=7,
            palette=sns.color_palette(['red','green']),
            )
g = g.map(sns.barplot, 'A', 'B').add_legend()

Данные представляют собой df в длинном формате pandas со следующей примерной структурой:

data=pd.DataFrame({'A':['X','X','Y','Y','X','X','Y','Y'],
               'B':[0,1,2,3,4,5,6,7],
               'C':[1,1,1,1,2,2,2,2],
               'type':['ctrl','cond1','ctrl','cond1','ctrl','cond1','ctrl','cond1']}
                )

В созданных графиках я теперь получаю полностью перекрывающиеся графики двух групп, таким образом, ctrlis отсутствует, см. ниже.Тем не менее, я собираюсь получить соседние неперекрывающиеся бары каждый.Как этого добиться?Мой реальный код имеет еще несколько баров на график, где вы можете видеть перекрывающиеся цвета (здесь полностью покрыты)

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Я думаю, что вы хотите предоставить аргумент hue для барплота, а не для FacetGrid.Поскольку группировка происходит внутри (одного) столбца, а не на уровне фасета.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

data=pd.DataFrame({'A':['X','X','Y','Y','X','X','Y','Y'],
               'B':[0,1,2,3,4,5,6,7],
               'C':[1,1,1,1,2,2,2,2],
               'type':['ctrl','cond1','ctrl','cond1','ctrl','cond1','ctrl','cond1']})

g = sns.FacetGrid(data,
            col='C',
            sharex=False,
            sharey=False,
            height=4)
g = g.map(sns.barplot, 'A', 'B', "type", 
          hue_order=np.unique(data["type"]), 
          order=["X", "Y"], 
          palette=sns.color_palette(['red','green']))
g.add_legend()

plt.show()

enter image description here

0 голосов
/ 05 октября 2018

этот ответ показывает, как использовать FacetGrid напрямую.

Но если у вас установлен 0.9.0, я бы порекомендовал вам использовать новый catplot()функция , которая будет производить правильный (по крайней мере, я так думаю?) сюжет.Обратите внимание, что эта функция возвращает объект FacetGrid.Вы можете передать kwargs вызову, чтобы настроить получившийся FacetGrid или изменить его свойства впоследствии.

g = sns.catplot(data=data, x='A', y='B', hue='type', col='C', kind='bar')

enter image description here

...