2010-09-30 29 views
6

He estado buscando en Google para ver si es posible cambiar solo el color de una barra en un gráfico realizado por matplotlib. Imagínese este gráfico:cómo cambiar el color de una sola barra si la condición es True matplotlib

alt text

digamos que tengo Evaluación 1 a 10 y por cada uno me he generar un gráfico cuando la elección de los usuarios de la evaluación. Para cada evaluación, uno de estos chicos ganará.
Entonces, para cada gráfico, me gustaría dejar la barra ganadora en un color diferente, digamos que Jim ganó la evaluación1. Jim bar sería rojo, y los otros azules.

Tengo un diccionario con los valores, lo que traté de hacer fue algo como esto:

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) 

Cualquier persona sabe una manera de hacer esto?

Gracias de antemano :)

Respuesta

17

Es necesario utilizar color en lugar de facecolor. También puede especificar el color como una lista en lugar de un valor escalar. Así, por tu ejemplo, usted podría tener color=['r','b','b','b','b']

Por ejemplo,

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() 

es un ejemplo completo que muestra lo que quiere.

para responder a su comentario:

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

realidad es que utilice facecolor en un gráfico de barras que también funciona. Pero de todos modos intenté cambiar a color y no es que el problema – pavid

+0

Ah bien, nunca he usado facecolor antes, mi error. Pero puedes usar el color como una lista, no estoy seguro de si facecolor funciona de la misma manera. – GWW

+0

Esa será una buena solución pero el problema es que la barra roja puede cambiar. En el ejemplo, uso a los niños, por lo que el ganador puede ser John y otro tiempo Will. Hago el gráfico automáticamente, así que si tu evaluación es de elección1, por ejemplo, el ganador es Peter, pero en la evaluación 8 el ganador puede ser Simon. – pavid

Cuestiones relacionadas