Есть ли простой способ убедиться, что два круговых графика из двух серий панд с одинаковыми индексами расположены в одном и том же порядке? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть две серии панд. Каждый из них имеет пять индексов: «Очень низкий», «Низкий», «Средний», «Высокий», «Очень высокий»). Ряды создаются программно путем разделения фрейма данных на две демографические группы и последующего получения значений дляопределенный столбец.

Две серии были созданы путем взятия фрейма данных pandas, разделения на основе того, была ли каждая строка добавлена ​​определенной демографией или нет, с извлечением значений для одного столбца.

demog1, demog2 = (df[df.Demographic == 'demog'], df[df.Demographic != 'demog'])
save_pie_chart(demog1, 'Column Name', 'demog1.png')
save_pie_chart(demog2, 'Column Name', 'demog2.png')

Когда я создаю круговую диаграмму из серии, у каждого есть индексы, расположенные в разных позициях и разных цветах. Я хочу убедиться, что оба раза они имеют одинаковые относительные позиции и одинаковый цвет.

Текущий метод, который я использую, состоит в том, чтобы вручную упорядочить метки и данные следующим образом:

def save_pie_chart(df, col, path):
    series = df[col].value_counts()
    if 'Medium' in series.index:
        labels = []
        sizes = []
        for label in ['Very low', 'Low', 'Medium', 'High', 'Very high']:
            labels.append(label)
            sizes.append(series[label])
        series = sizes
    else:
        labels = series.keys()
    fig, ax = plt.subplots()
    ax.pie(series, labels=labels, autopct='%1.0f%%')
    ax.axis('equal')
    fig.savefig(path)

В приведенном выше примере, если я распечатываю переменную series после извлечения значений, я получаюследующий вывод:

Low          15
Very high    14
Very low     11
Medium       11
High         10
Name: Column Name, dtype: int64
High         95
Low          89
Medium       85
Very low     85
Very high    85
Name: Column Name, dtype: int64

first pie chart second pie chart

Есть ли для меня встроенный способ сказать matplotlib, «Я хочу метки в этом порядке», и передать им метки?

1 Ответ

1 голос
/ 21 октября 2019

Вы можете использовать value_counts(sort=False) и df.plot.bar:

axes = (df.groupby('Demographic')['Medium'].value_counts()
   .unstack('Demographic')
   .plot.pie(subplots=True, autopct='%1.0f%%')
)

for ax in axes: ax.get_legend().remove()

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...