Построение гистограмм против классов в 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