El gráfico de barras de Matplotlib elige el color si el valor es positivo y el valor es negativo

Tengo un Pandas DataFrame con valores positivos y negativos como un gráfico de barras. Quiero trazar los colores positivos ‘verde’ y los valores negativos ‘rojo’ (muy originales … jajaja). No estoy seguro de cómo pasar si> 0 ‘verde’ o <0 'rojo'?

data = pd.DataFrame([[-15], [10], [8], [-4.5]],index=['a', 'b', 'c', 'd'],columns=['values']) data.sort().plot(kind='barh') 

introduzca la descripción de la imagen aquí

Yo crearía una columna ficticia para determinar si la observación es mayor que 0.

 In [39]: data['positive'] = data['values'] > 0 In [40]: data Out[40]: values positive a -15.0 False b 10.0 True c 8.0 True d -4.5 False [4 rows x 2 columns] In [41]: data['values'].plot(kind='barh', color=data.positive.map({True: 'r', False: 'k'})) Out[41]:  

Además, es posible que desee tener cuidado de no tener nombres de columnas que se superpongan con los atributos de DataFrame. DataFrame.values proporciona la matriz numpy subyacente para un DataFrame. Tener nombres superpuestos le impide utilizar la syntax df. .