Mi chiedevo come creare un grafico ad area in pila 100% in matplotlib. Alla pagina matplotlib non ho trovato un esempio per questo.Creare un grafico ad area in pila 100% con matplotlib
Qualcuno qui può mostrarmi come ottenerlo?
Mi chiedevo come creare un grafico ad area in pila 100% in matplotlib. Alla pagina matplotlib non ho trovato un esempio per questo.Creare un grafico ad area in pila 100% con matplotlib
Qualcuno qui può mostrarmi come ottenerlo?
Un modo semplice per raggiungere questo obiettivo è quello di fare in modo che per ogni valore x, i valori y sommano a 100.
io presuppongono che i valori y sono organizzati in una matrice come nell'esempio sotto, IE
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]])
per assicurarsi i totali di colonna sono 100, si deve dividere la matrice y
dai suoi somme di colonna, e quindi moltiplicare per 100. Questo rende i valori y spaziano da 0 a 100, rendendo la "unità" dell'asse Y percento. Se preferisci che i valori dell'asse y coprano l'intervallo da 0 a 1, non moltiplicare per 100.
Anche se non hai i valori y organizzati in uno array come sopra , Il principio è lo stesso; gli elementi corrispondenti in ogni matrice costituiti da valori y (ad esempio y1
, y2
ecc.) devono essere pari a 100 (o 1).
Il codice riportato di seguito è una versione modificata di example @LogicalKnight collegato nel suo commento.
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()
Fornisce l'output mostrato di seguito.
Grazie mille per l'aiuto corretto! Al momento sto combattendo un po 'con mpl 1.2.1 e numpy per tracciare i dati in primo luogo, e non ho avuto il tempo di guardare ancora questo problema. Quindi, sono davvero felice di avere questo bel pezzo di codice! Saluti Thomas –
Ho provato questo metodo per produrre una pila grafico me solo ora, e un'eccezione viene gettata ogni volta che provo a chiamare stackplot 'Traceback (chiamata più recente scorso): file "
@Magic_Matt_Man Quali versioni di Python e Matplotlib stai usando? – hooy
ne dite di questo [es] (http://matplotlib.org/examples/pylab_examples/stackplot_demo.html)? –
Hai provato qualcosa? Solitamente otterrai una risposta migliore su SO se hai per lo più codice funzionante. Così com'è, questa domanda si legge e "per favore fai il mio lavoro per me". L'esempio @LogicalKnight puntato su è un buon inizio e ottiene il 95% del modo in cui ci sono. – tacaswell