Ich brauche Hilfe bei der Erstellung einer Reihe von gestapelten Balkendiagramme in Python mit Matlibplot. Mein grundlegender Code ist unten, aber meine Probleme sind, wie man den Wert für unteren für jedes mögliches Element über dem 2. effizient erzeugt. Ich kann das Beispiel Graphen erhalten, richtig zu stapeln (immer a, b, c, d von unten nach oben)Effizienter Matplotlib gestapelt Balkendiagramm - wie unteren Werte zu berechnen
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()
Mein letzten Code könnte sehr große Anzahl von Bars hat und die immer größer werdende Funktion unten = [.. .] kann nicht die beste Lösung sein. Es wäre großartig, wenn Sie auch erklären könnten, wie ich den Wert ableiten muss. Gibt es eine anzahl Funktion?
Vielen Dank !!! PS Ich habe nach einer Antwort gesucht, aber ich habe nicht verstanden, was ich finden konnte.
Danke - wie bekomme ich Leerzeichen zwischen den Balken? – Matt
Ich habe den Code aktualisiert, um Lücken zu ermöglichen. Es ist eigentlich ziemlich einfach, wenn Sie einen festen Betrag von den Breiten der Balken abziehen, dann schrumpft es sie effektiv. Danach geht es nur noch darum, mit den Xlims zu spielen. Der Hauptfunktionsaufruf hat jetzt zwei neue Parameter, Lücken und EndGaps. Die unteren beiden Bilder zeigen Beispiele davon. – minillinim
Liebe @ minillinim Paket. Es fühlte sich zu einfach an. Um eine Legende hinzuzufügen, wenn Sie die Farben mit einem Array wie 'stacked_colors = ['# 2166ac', '# fee090', '# fdbb84']' und 'cols = stacked_colors' festlegen, ist es einfach, eine Legende hinzuzufügen eine grafische Darstellung von einem pandas Datenrahmen aus: 'Legenden = [] i = 0 für Spalte in df.columns: legends.append (mpatches.Patch (color = stacked_colors [i], Etikett = Spalte)) i + = 1 plt.legend (handles = legends) ' –