Построение гистограмм против классов в pandas/matplotlib
Есть ли идиоматический способ построения гистограммы функции для двух классов?
В pandas я в основном хочу
df.feature[df.class == 0].hist()
df.feature[df.class == 1].hist()
Быть в одном сюжете. Я мог бы сделать
df.feature.hist(by=df.class)
но это дает мне две отдельные графики.
Это, кажется, общая задача, поэтому я бы предположил, что это будет идиоматический способ сделать это. Конечно, я мог бы вручную манипулировать гистограммами, чтобы соответствовать друг другу, но обычно pandas делает это довольно хорошо.
В принципе, я хочу этот пример matplotlib в одной строке pandas: http://matplotlib.org/examples/pylab_examples/barchart_demo.html
Я думал, что чего-то не хватает, но, возможно, это невозможно (пока).
Ответы
Ответ 1
Как насчет df.groupby("class").feature.hist()
? Чтобы увидеть перекрывающиеся дистрибутивы, вам, вероятно, придется пройти alpha=0.4
до hist()
. В качестве альтернативы, у меня возникнет соблазн использовать оценку плотности ядра вместо гистограммы с помощью df.groupby("class").feature.plot(kind='kde')
.
В качестве примера я построил классы набора диафрагмы, используя:
iris.groupby("Name").PetalWidth.plot(kind='kde', ax=axs[1])
iris.groupby("Name").PetalWidth.hist(alpha=0.4, ax=axs[0])
![enter image description here]()