Schließlich bekam ich die Antwort, Als ich the example in matplotlib page gefolgt, den Boden Schlüsselwort enthält, die den Anstieg der einzelnen Probendaten über die vorherige angibt.
p2 = plt.bar(ind, womenMeans, width, color='y', bottom=menMeans, yerr=womenStd)
Zum Beispiel, wenn wir Männer und Frauen Daten, wie im Beispiel dargestellt werden sollen, beginnt man mit Männern mit Score 20 (in Serie G1), dann Frauen zu zeichnen, beginnen sie den Wert von 25 Plotten mit Boden Wert von 20. Um dies zu erweitern, wenn wir eine andere Kategorie hinzugefügt, sagen Kinder, mit Kerbe 15, dann sollte es mit Boden = 20 + 25 = 45. usw.
mit negativen Werten dargestellt werden wir haben ein Problem, dass sie in die entgegengesetzte Richtung der positiven gewachsen sind. also sollte es mit bottom = 0 beginnen, dann mit maximalem Wert der Summe von positiven oder negativen Werten unabhängig voneinander. Um das mit einem Beispiel zu verstehen, wenn wir eine Reihe wie folgt grafisch darstellen wollen: (20, 25, -15, 30, -10, -5, 17, 3, -28) Die Böden jedes Wertes sollten sein wie folgt (0, 20, 0, 45, -15, -25, 75, 92, -30) Warum?
Für die 20, wir nur initiieren zeichnen, so, kein Boden erforderlich. Für die 25, wir müssen es Für die -15 bis 20 steigen, ist es der erste negativer Wert, also muss es ohne Bodenwert, so dass der Boden = 0 Für die 30, es sollte unterhalb der Achse gezogen werden um 20 + 25 = 45 Für die -10 angehoben werden, sollte es unter dem bisherigen negativen Wert beginnen, die -15 Für die nächsten -5 ist, sollte es beginnen unterhalb -10 + -15 = -25 Und so weiter. ..
def bottoms_matrix(matrix):
positives = []
negatives = []
for i, row_mat in enumerate(matrix):
tmp_p = []
tmp_n = []
for j, cell in enumerate(row_mat):
if cell >0:
tmp_p.append(cell)
tmp_n.append(0.)
else:
tmp_p.append(0.)
tmp_n.append(cell)
positives.append(tmp_p)
negatives.append(tmp_n)
# get cumulative sums
positives = positives[:-1]
negatives = negatives[:-1]
positives.insert(0, [0.] * len (matrix[0]))
negatives.insert(0, [0.] * len(matrix[0]))
tmp = swap_matrix(positives)
tmp = [list(np.cumsum(t)) for t in tmp]
positives = swap_matrix(tmp)
tmp = swap_matrix(negatives)
tmp = [list(np.cumsum(t)) for t in tmp]
negatives = swap_matrix(tmp)
final_matrix =[]
for i, row_mat in enumerate(matrix):
tmp =[]
for j, cell in enumerate(row_mat):
tmp.append(positives[i][j] if cell > 0 else negatives[i][j])
final_matrix.append(tmp)
return final_matrix
Ein komplettes Beispiel mit Daten und alle Hilfsfunktionen is uploaded on my Git page.
[hier] (http://matplotlib.org/examples/pylab_examples/bar_stacked.html) gestapelt bar Beispiel aus matplotlib Galerie. Sollte dir einen guten Startpunkt geben. – Primer
Das Problem in diesem Beispiel, dass es sich nur um positive Daten handelt. Bitte lesen Sie die Beschreibung in der ersten Antwort unten. –
Dies scheint eine doppelte Frage zu sein: http://stackoverflow.com/questions/35979852/stacked-bar-charts-using-python-matplotlib-for-positive-and-negative-values – elke