cómo cambiar el color de una sola barra si la condición es verdadera matplotlib

He estado buscando en Google para encontrar si es posible cambiar solo el color de una barra en un gráfico hecho por matplotlib. Imagina este gráfico:

texto alternativo

digamos que he evaluado del 1 al 10 y para cada uno tengo un gráfico generado cuando el usuario elige la evaluación. Por cada evaluación ganará uno de estos chicos.
Entonces, para cada gráfico, me gustaría dejar la barra de ganadores en un color diferente, digamos que Jim ganó evaluación1. Jim bar sería rojo, y los otros azul.

Tengo un diccionario con los valores, lo que intenté 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) 

¿Alguien sabe una forma de hacer esto?

Gracias por adelantado 🙂

Necesitas usar color lugar de facecolor . También puede especificar el color como una lista en lugar de un valor escalar. Entonces, para tu ejemplo, podrías 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 le muestra lo que quiere.

Para responder a tu 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) 

para marinos puedes hacer algo como esto:

 values = np.array([2,5,3,6,4,7,1]) idx = np.array(list('abcdefg')) clrs = ['grey' if (x < max(values)) else 'red' for x in values ] sb.barplot(x=idx, y=values, palette=clrs) # color=clrs) 

introduzca la descripción de la imagen aquí