J'ai une table dans un pandas DataFrame
nommé df
:
+--- -----+------------+-------------+----------+------------+-----------+
|avg_views| avg_orders | max_views |max_orders| min_views |min_orders |
+---------+------------+-------------+----------+------------+-----------+
| 23 | 123 | 135 | 500 | 3 | 1 |
+---------+------------+-------------+----------+------------+-----------+
Ce que je recherche maintenant, c'est de tracer un graphique à barres groupé qui me montre (moyenne, max, min) des vues et des commandes dans un seul graphique à barres.
c'est-à-dire que sur l'axe des x, il y aurait des vues et des commandes séparées par une distance et 3 barres de (moyenne, max, min) pour les vues et de même pour les commandes.
J'ai joint un exemple d'image de graphique à barres, juste pour savoir à quoi devrait ressembler le graphique à barres.
La couleur verte doit être pour moy, jaune pour max et rose pour moy.
J'ai pris le code suivant de définition de l'espacement entre les graphiques à barres groupés dans matplotlib mais cela ne fonctionne pas pour moi:
plt.figure(figsize=(13, 7), dpi=300)
groups = [[23, 135, 3], [123, 500, 1]]
group_labels = ['views', 'orders']
num_items = len(group_labels)
ind = np.arange(num_items)
margin = 0.05
width = (1. - 2. * margin) / num_items
s = plt.subplot(1, 1, 1)
for num, vals in enumerate(groups):
print 'plotting: ', vals
# The position of the xdata must be calculated for each of the two data
# series.
xdata = ind + margin + (num * width)
# Removing the "align=center" feature will left align graphs, which is
# what this method of calculating positions assumes.
gene_rects = plt.bar(xdata, vals, width)
s.set_xticks(ind + 0.5)
s.set_xticklabels(group_labels)
traçage: [23, 135, 3] ... ValueError: incompatibilité de forme: les objets ne peuvent pas être diffusés sur une seule forme
Utilisation de pandas:
import pandas as pd
groups = [[23,135,3], [123,500,1]]
group_labels = ['views', 'orders']
# Convert data to pandas DataFrame.
df = pd.DataFrame(groups, index=group_labels).T
# Plot.
pd.concat(
[df.mean().rename('average'), df.min().rename('min'),
df.max().rename('max')],
axis=1).plot.bar()