Ho bisogno di aiuto per creare una serie di grafici a barre in pila in python con matlibplot. Il mio codice di base è sotto ma i miei problemi è come generare il valore per in basso per qualsiasi elemento oltre il 2o in modo efficiente. Posso ottenere il grafico esempio di impilare correttamente (sempre a, b, c, d dal basso verso l'alto)Grafico a barre matplotlib più efficiente - come calcolare i valori inferiori
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()
mio codice finale potrebbe avere gran numero di barre e la funzione continua espansione sotto = [.. .] non può essere la soluzione migliore. Sarebbe bello se potessi anche spiegare come ho bisogno di ricavarne il valore. C'è una funzione numpy.
Grazie mille !!! PS Ho cercato una risposta ma non ho capito cosa potrei trovare.
Grazie - come posso ottenere spazi tra le barre? – Matt
Ho aggiornato il codice per consentire gli spazi vuoti. In realtà è piuttosto semplice, se si deduce una quantità fissa dalle larghezze delle barre, quindi le riduce efficacemente. Dopodiché è solo questione di giocare con gli xlim. La chiamata alla funzione principale ora ha due nuovi paramter, gap e endGaps, le due immagini in basso mostrano esempi di questi in uso. – minillinim
Pacchetto di Love @ minillinim. Mi è sembrato troppo facile. Per aggiungere una legenda, se imposti i colori con una matrice come 'stacked_colors = ['# 2166ac', '# fee090', '# fdbb84']' e 'cols = stacked_colors', allora è facile aggiungere una legenda a una trama fatta da un dataframe panda: 'legende = [] i = 0 per colonna df.columns: legends.append (mpatches.Patch (colore = stacked_colors [i], label = colonna)) i + = 1 plt.legend (handles = legende) ' –