Ein einfacher Weg, dies zu erreichen, ist sicher organisiert werden, dass, wie im Beispiel in einem Array für jeden x-Wert, der y-Wert Summe 100.en
Ich gehe davon aus, dass Sie die y-Werte unten, dh
y = np.array([[17, 19, 5, 16, 22, 20, 9, 31, 39, 8],
[46, 18, 37, 27, 29, 6, 5, 23, 22, 5],
[15, 46, 33, 36, 11, 13, 39, 17, 49, 17]])
um die Spaltensummen sind 100 stellen Sie sicher, können Sie die y
Array durch seine Spaltensummen zu teilen, und dann multipliziert mit 100. Dies macht die y-Werte von 0 bis 100 überspannen, so dass die "Einheit" der Y-Achse Prozent. Wenn Sie stattdessen möchten, dass die Werte der Y-Achse das Intervall von 0 bis 1 überspannen, multiplizieren Sie nicht mit 100.
Auch wenn Sie nicht die y-Werte in ein Array wie oben organisiert haben das Prinzip ist das gleiche; die entsprechenden Elemente in jedem Feld, die aus y-Werten bestehen (z. B. y1
, y2
usw.) sollten zu 100 (oder 1) summieren.
Der folgende Code ist eine modifizierte Version des example @LogicalKnight in seinem Kommentar verknüpft.
import numpy as np
from matplotlib import pyplot as plt
fnx = lambda : np.random.randint(5, 50, 10)
y = np.row_stack((fnx(), fnx(), fnx()))
x = np.arange(10)
# Make new array consisting of fractions of column-totals,
# using .astype(float) to avoid integer division
percent = y/y.sum(axis=0).astype(float) * 100
fig = plt.figure()
ax = fig.add_subplot(111)
ax.stackplot(x, percent)
ax.set_title('100 % stacked area chart')
ax.set_ylabel('Percent (%)')
ax.margins(0, 0) # Set margins to avoid "whitespace"
plt.show()
Dies ergibt die unten gezeigte Ausgabe.
Wie wäre es dieses [Beispiel] (http://matplotlib.org/examples/pylab_examples/stackplot_demo.html)? –
Hast du irgendwas probiert? Normalerweise erhalten Sie eine bessere Antwort auf SO, wenn Sie hauptsächlich Code arbeiten. Wie es aussieht, liest sich diese Frage und "bitte tu meine Arbeit für mich". Das Beispiel @LogicalKnight, auf das gezeigt wird, ist ein guter Start und bringt dich zu 95% dorthin. – tacaswell