2010-08-29 12 views
15

In matplotlib, il ciclo di colori traccia automaticamente il colore. Questi grafici a due linee avrebbero colori diversi.Come faccio a far girare automaticamente i grafici a barre su diversi colori?

axes.plot(x1, y) 
axes.plot(x2, y) 

Tuttavia, i grafici a barre non lo fanno. Entrambe queste serie di dati avranno barre blu.

axes.bar(x1, y) 
axes.bar(x2, y) 

Come faccio a far scorrere automaticamente i grafici a barre su una serie predefinita di colori?

risposta

4

Opzionale: Per ottenere il pieno controllo sullo stile delle vostre figure utilizzare un mplstyle esistente come modello: https://github.com/matplotlib/matplotlib/tree/master/lib/matplotlib/mpl-data/stylelib

regolare il parametro: axes.prop_cycle: cycler ('color', [. ...])

carico il tuo stile:

from matplotlib import style 
style.use ('PATH TO YOUR MPL STYLE') 

è possibile scorrere la vostra o il ciclo di colore di stile di default quasi qualsiasi modo si vuole:

#!/usr/bin/python 
import matplotlib.pyplot as plt 

#data 
x=[1,2,4] 
y=[11,12,8] 
prop_iter = iter(plt.rcParams['axes.prop_cycle']) 

for i in range(0,len(x)): 
    plt.bar(x[i],y[i],color=next(prop_iter)['color']) 

plt.show() 

plt.rcParams [ 'axes.prop_cycle'] afferra tutti i cicli, quindi è necessario selezionare il cycler corretto utilizzando il tasto ['colore'].

È possibile eliminare la creazione iteratore e utilizzare la lista di comprensione e zip per creare uno liners:

#!/usr/bin/python 
import matplotlib.pyplot as plt 

x=[1,2,4] 
y=[11,12,8] 
prop = plt.rcParams['axes.prop_cycle'] 
[plt.bar(param[0],param[1],color=param[2]['color']) for param in zip(x,y,prop)] 
plt.show() 

enter image description here

3

Dalla documentazione in http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.bar

Le trame a barre non il colore del ciclo automaticamente ma è possibile impostare il colore direttamente passando le proprietà del colore. Qualcosa di simile a questo:

colors = ['red', 'blue', 'green'] 
i = -1 
def getCycledColor(): 
    global i, colors 
    if i < len(colors) -1 
     i = i + 1 
     return colors[i] 
    else: 
     i = -1 
axes.bar(x1,y,facecolor=getCycledColor()) 
axes.bar(x2,y,facecolor=getCycledColor()) 

I colori possono essere scelti da un elenco predefinito e pedalato.

+0

che appena produce due trame bar, uno con tutte le barre rosse e uno con tutte le barre blu (poiché 'getCycledColor()' viene chiamato una sola volta quando viene chiamato 'axes(). bar (..)') –

24

Qualcosa in questo senso lo farebbe per te?

#!/usr/bin/python 
from matplotlib import cm 
import matplotlib.pyplot as plt 

#data 
x=[1,2,4] 
y=[11,12,8] 

for i in range(0,len(x)): 
    plt.bar(x[i],y[i],color=cm.jet(1.*i/len(x))) 

plt.show() 

Ulteriori informazioni su colormaps.

MODIFICA: vedere this example per come passare da un gruppo predefinito di colori.