Как мне создать несколько графиков из сгруппированных данных, используя Matplotlib или Seaborn? - PullRequest
0 голосов
/ 15 октября 2019

У меня есть следующий фрейм данных в пандах:

Dataframe

Он сгруппирован / проиндексирован по возрастному диапазону участников в наборе данных. Для каждого возрастного диапазона в фрейме данных я бы хотел сгенерировать столбчатую диаграмму, столбцы которой отображают показатели разводов, брака и т. Д. Для данного конкретного возрастного диапазона. Как я могу сделать это, используя Matplotlib или Seaborn? Заранее благодарим за любую оказанную помощь.

Код, использованный для генерации кадра данных:

import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
plt.style.use('ggplot')

df = pd.DataFrame({
    'age_range': [(18, 28), (28, 38), (38, 48), (48, 58), (58, 68), (68, 78), (78, 88)],
    'divorced': [0.015837, 0.068826, 0.138132, 0.185022, 0.180258, 0.179211, 0.099502],
    'living with partner': [0.21040724, 0.14979757, 0.07392996, 0.06828194, 0.04506438, 0.01075269, 0.00995025],
    'married': [0.24208145, 0.51619433, 0.57198444, 0.54625551, 0.50429185, 0.37992832, 0.28855721],
    'never_married': [0.50904977, 0.23279352, 0.14202335, 0.08370044, 0.09012876,0.05734767, 0.05472637],
    'refused': [np.nan, np.nan, np.nan, np.nan, 0.00214592, np.nan, np.nan],
    'widowed': [np.nan, 0.00202429, 0.0155642 , 0.05506608, 0.12875536, 0.33691756, 0.53731343]
})

df.set_index('age_range', inplace=True)
df

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Если вы не хотите иметь сложенные бары и хотите, чтобы они были огранены оттенком, это довольно быстро с морским рожком:

g = (
    df.stack()
      .to_frame('Count')
      .rename_axis(index=['Age Range', 'Status'])
      .reset_index()
      .pipe((sns.factorplot, 'data'), 
            x='Age Range', y='Count',
            hue='Status', kind='bar',
            size=3.5, aspect=1.86)

)

enter image description here

Или вы можете фасетировать по столбцам:

g = (
    df.stack()
      .to_frame('Count')
      .rename_axis(index=['Age Range', 'Status'])
      .reset_index()
      .pipe((sns.factorplot, 'data'), 
            x='Age Range', y='Count',
            col='Status', kind='bar',
            size=3.5, aspect=1.86, col_wrap=2)

)

enter image description here

0 голосов
/ 15 октября 2019

Поскольку эти проценты, как правило, суммируют до 1, достаточно сгруппированная гистограмма:

plt.style.use('ggplot')
ax = df.plot.bar(stacked=True)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

Результат:

stacked bar chart of marriage status

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