Graphique à barres empilées matplotlib plus efficace - comment calculer les valeurs inférieures
J'ai besoin d'aide pour effectuer un ensemble de graphiques à barres empilées en python avec matlibplot. Mon code de base est en dessous, mais mon problème est de savoir comment générer de la valeur pour bas pour n'importe quel élément au-delà de la 2ème efficacement. Je peux obtenir l'exemple de graphique d'empiler correctement (toujours a,b,c,d, du bas vers le haut)
import numpy as np
import matplotlib.pyplot as plt
ind = np.arange(3)
a = [3,6,9]
b = [2,7,1]
c = [0,3,1]
d = [4,0,3]
p1 = plt.bar(ind, a, 1, color='#ff3333')
p2 = plt.bar(ind, b, 1, color='#33ff33', bottom=a)
p3 = plt.bar(ind, c, 1, color='#3333ff', bottom=[a[j] +b[j] for j in range(len(a))])
p4 = plt.bar(ind, d, 1, color='#33ffff', bottom=[a[j] +b[j] +c[j] for j in range(len(a))])
plt.show()
Mon code final pourrait très grand nombre de bars et de l'expansion constante de la fonction de base = [...] ne peuvent pas être la meilleure solution. Il serait génial si vous pouviez aussi expliquer comment j'ai besoin de dériver la valeur. Est-il une fonction numpy.
Merci beaucoup!!!
PS j'ai cherché une réponse, mais je n'ai pas compris ce que j'ai pu trouver.
source d'informationauteur 2705114-john
Vous devez vous connecter pour publier un commentaire.
J'ai récemment été confronté au même problème. Par la suite j'ai décidé d'envelopper le tout dans une belle classe. Pour toute personne intéressée, vous obtenez une mise en œuvre d'un histogramme empilé classe ici:
https://github.com/minillinim/stackedBarGraph
Il permet à l'échelle empilées les graphiques ainsi que la barre de réglage de la largeur et de définir les hauteurs (à l'échelle ampoules).
Donné un ensemble de données comme ceci:
Il peut faire des images comme ceci:
GPLv3 avec amour.
La conversion de vos valeurs pour les tableaux numpy qui va rendre votre vie plus facile:
Sinon, pour se débarrasser de ces méchants cas particulier pour le premier bar:
En Python 2, vous pouvez aussi faire
mais Python 3 aurait besoin
qui est moins joli.
Vous pourriez encapsuler ce:
et puis ne
trop.
Si
a
b
c
etd
sont des tableaux numpy vous pouvez également fairesum([a, b, c])
:Je l'ai résolu comme ceci:
Il est semblable à d'autres solutions, mais il n'a pas besoin de toutes les marges être stockées à tout moment. Au lieu de cela, il "crée" les piles de base, en ajoutant de plus en plus de marge à chaque itération.