2010-09-30 7 views
6

Ho cercato su googleing se è possibile modificare solo il colore di una barra in un grafico creato da matplotlib. Immaginate questo grafico:come modificare il colore di una singola barra se la condizione è True matplotlib

alt text

diciamo che ho di valutazione da 1 a 10 e per ciascuno ho un grafico genera quando la scelta dell'utente la valutazione. Per ogni valutazione, uno di questi ragazzi vincerà.
Quindi, per ogni grafico, vorrei lasciare la barra del vincitore in un colore diverso, diciamo che Jim ha vinto la valutazione1. Jim bar sarebbe rosso, e gli altri blu.

Ho un dizionario con i valori, che ho cercato di fare è stato qualcosa di simile a questo:

for value in dictionary.keys(): # keys are the names of the boys 
    if winner == value: 
     facecolor = 'red' 
    else: 
     facecolor = 'blue' 

ax.bar(ind, num, width, facecolor=facecolor) 

qualcuno conosce un modo di fare questo?

Grazie in anticipo :)

risposta

17

è necessario utilizzare color invece di facecolor. È inoltre possibile specificare il colore come elenco anziché come valore scalare. Così, per il tuo esempio, si potrebbe avere color=['r','b','b','b','b']

Per esempio,

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 

N = 5 
ind = np.arange(N) 
width = 0.5 
vals = [1,2,3,4,5] 
colors = ['r','b','b','b','b'] 
ax.barh(ind, vals, width, color=colors) 

plt.show() 

è un esempio completo che vi mostra quello che vuoi.

Per rispondere a un commento:

colors = [] 
for value in dictionary.keys(): # keys are the names of the boys 
    if winner == value: 
     colors.append('r') 
    else: 
     colors.append('b') 

bar(ind,num,width,color=colors) 
+0

è in realtà si utilizza facecolor in un grafico a barre che anche il lavoro. Ma comunque ho provato a cambiare colore e non è il problema – pavid

+0

Ah ok, non ho mai usato Facecolor in precedenza, il mio errore. Ma puoi usare il colore come una lista, non sono sicuro che facecolor funzioni allo stesso modo. – GWW

+0

Questa sarà una buona soluzione ma il problema è che la barra rossa potrebbe cambiare. Nell'esempio uso i ragazzi, quindi il vincitore potrebbe essere John e l'altro tempo Will. Io faccio il grafico automaticamente, quindi se scegli una valutazione1, ad esempio il vincitore è Peter ma nella valutazione 8 il vincitore potrebbe essere Simon. – pavid

Problemi correlati