Lorsque je dessine un graphique à barres empilées en Python, j'aimerais pouvoir afficher l'étiquette de données comme Excel, et lorsque je l'ai recherchée, il n'y avait aucun article qui pouvait afficher l'étiquette de données, et il n'y avait pas de code que je pourrais copier et coller. J'ai donc écrit un code que je peux copier et coller lorsque je veux attacher une étiquette de données au graphique à barres empilées.
Au fait, si vous avez seulement besoin de dessiner un graphique à barres empilées, veuillez vous référer à ** Facile à dessiner un graphique à barres empilées ** à la fin de cette page.
Importez les bibliothèques suivantes.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='IPAexGothic')
%matplotlib inline
Les données factices ont créé des données de ventes mensuelles pour les succursales A, B et C.
dataset = pd.DataFrame([[100, 200, 50], [300, 400, 600], [50, 300, 60]],
columns=['Branche A', 'Branche B', 'Branche C'],
index=['avril', 'Peut', 'juin'])
Branche A | Branche B | Branche C | |
---|---|---|---|
avril | 100 | 200 | 50 |
Peut | 300 | 400 | 600 |
juin | 50 | 300 | 60 |
Tout d'abord, dessinons un graphique à barres simple. Dessinez un graphique à barres qui totalise les ventes mensuelles de chaque succursale. C'est bien de dessiner, mais avec cela seul, je ne sais pas combien de ventes chaque mois. .. .. Dans un tel cas, utilisons un graphique à barres empilées!
fig, ax = plt.subplots(figsize=(10, 8))
ax.bar(dataset.columns, dataset.sum())
plt.show()
Les graphiques à barres empilés utilisent ʻax.bar () `comme ils le font lors de la création de graphiques à barres. Spécifiez la coordonnée y qui est la base de la barre dans l'argument «bottom» à ce moment. Vous avez maintenant un graphique à barres empilées! !! !! Après tout, je veux une étiquette de données. Site de référence: https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.bar.html
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
ax.set(xlabel='Nom de la filiale', ylabel='Ventes')
ax.legend(dataset.index)
plt.show()
Le sujet principal est enfin d'ici.
L'étiquette de données est insérée en spécifiant les coordonnées x et y avec plt.text ()
.
Ensuite, j'ai eu une bonne impression!
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(dataset)):
ax.bar(dataset.columns, dataset.iloc[i], bottom=dataset.iloc[:i].sum())
for j in range(len(dataset.columns)):
plt.text(x=j,
y=dataset.iloc[:i, j].sum() + (dataset.iloc[i, j] / 2),
s=dataset.iloc[i, j],
ha='center',
va='bottom'
)
ax.set(xlabel='Nom de la filiale', ylabel='Ventes')
ax.legend(dataset.index)
plt.show()
Lorsque vous utilisez un graphique à barres empilées, vous souhaitez également utiliser un graphique à barres empilées à 100%. Commencez par traiter les données. Le code suivant convertit les ventes par succursale en pourcentages.
plot_dataset = pd.DataFrame(index = dataset.index)
for col in dataset.columns:
plot_dataset[col] = round(100 * dataset[col] / dataset[col].sum(), 1)
Branche A | Branche B | Branche C | |
---|---|---|---|
avril | 22.2 | 22.2 | 7.0 |
Peut | 66.7 | 444. | 84.5 |
juin | 11.1 | 33.3 | 8.5 |
Dessinez un graphique à barres empilées à 100% en utilisant les données converties. Le code est le même que le code précédent. (Seules les variables sont modifiées.)
fig, ax = plt.subplots(figsize=(10, 8))
for i in range(len(plot_dataset)):
ax.bar(plot_dataset.columns,
plot_dataset.iloc[i],
bottom=plot_dataset.iloc[:i].sum()
)
for j in range(len(plot_dataset.columns)):
plt.text(x=j,
y=plot_dataset.iloc[:i, j].sum()+(plot_dataset.iloc[i, j]/2),
s=f'{plot_dataset.iloc[i, j]}%',
ha='center',
va='bottom'
)
ax.set(xlabel='Nom de la filiale', ylabel='Ventes')
ax.legend(plot_dataset.index)
plt.show()
Si vous souhaitez simplement dessiner un graphique à barres empilées, vous pouvez facilement le dessiner avec le code suivant.
fig, ax = plt.subplots(figsize=(10, 8))
dataset.T.plot(kind='bar', stacked=True, ax=ax)
plt.show()