Je travaille sur un projet d'école et je suis coincé à faire un graphique à barres groupé. J'ai trouvé cet article en ligne avec une explication : https:// www.pythoncharts.com/2019/03/26/grouped-bar-charts-matplotlib/ Maintenant, j'ai un ensemble de données avec une colonne Age et une colonne Sexe dans la colonne Age, il y a combien d'années le client est et dans le sexe est un 0 pour la femme et 1 pour l'homme. Je veux tracer la différence d'âge entre l'homme et la femme. Maintenant, j'ai essayé le code suivant comme dans l'exemple :

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import pylab as pyl
fig, ax = plt.subplots(figsize=(12, 8))
x = np.arange(len(data.Age.unique()))
# Define bar width. We'll use this to offset the second bar.
bar_width = 0.4
# Note we add the `width` parameter now which sets the width of each bar.
b1 = ax.bar(x, data.loc[data['Sex'] == '0', 'count'], width=bar_width)
# Same thing, but offset the x by the width of the bar.
b2 = ax.bar(x + bar_width, data.loc[data['Sex'] == '1', 'count'], width=bar_width)

Cela a généré l'erreur suivante: KeyError: 'count'

Ensuite, j'ai essayé de changer un peu le code et j'ai eu une autre erreur:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import pylab as pyl
fig, ax = plt.subplots(figsize=(12, 8))
x = np.arange(len(data.Age.unique()))
# Define bar width. We'll use this to offset the second bar.
bar_width = 0.4
# Note we add the `width` parameter now which sets the width of each bar.
b1 = ax.bar(x, (data.loc[data['Sex'] == '0'].count()), width=bar_width)
# Same thing, but offset the x by the width of the bar.
b2 = ax.bar(x + bar_width, (data.loc[data['Sex'] == '1'].count()), width=bar_width)

Cela a généré l'erreur: ValueError: incompatibilité de forme: les objets ne peuvent pas être diffusés vers une seule forme

Maintenant, comment puis-je compter les résultats que je peux faire ce graphique à barres groupées?

1
Jdiehl 11 oct. 2019 à 15:00

1 réponse

Meilleure réponse

Il semble que l'article rencontre trop de problèmes pour tracer une barre de graphique groupée:

np.random.seed(1)
data = pd.DataFrame({'Sex':np.random.randint(0,2,1000),
                     'Age':np.random.randint(20,50,1000)})

(data.groupby('Age')['Sex'].value_counts()        # count the Sex values for each Age
     .unstack('Sex')                              # turn Sex into columns
     .plot.bar(figsize=(12,6))                    # plot grouped bar
)

Ou encore plus simple avec seaborn:

fig, ax = plt.subplots(figsize=(12,6))
sns.countplot(data=data, x='Age', hue='Sex', ax=ax)

Production:

enter image description here

1
Quang Hoang 11 oct. 2019 à 13:31