Solución:
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: 'g', False: 'r'}))
Además, es posible que desee tener cuidado de no tener nombres de columna que se superpongan con los atributos de DataFrame. DataFrame.values
dar la matriz numérica subyacente para un DataFrame. Tener nombres superpuestos le impide usar el df.<column name>
sintaxis.
Si desea evitar agregar una columna, puede hacer la solución de TomAugspurger en un solo paso:
data['values'].plot(kind='barh',
color=(data['values'] > 0).map({True: 'g',
False: 'r'}))
Definir
def bar_color(df,color1,color2):
return np.where(df.values>0,color1,color2).T
luego
data.plot.barh(color=bar_color(data,'r','g'))
da
También funciona para series de barras múltiples.
df=pd.DataFrame(np.random.randint(-10,10,(4,6)))
df.plot.barh(color=bar_color(df,'r','g'))
da
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)