Matplotlib Bar Chart выбирает цвет, если значение положительное, а значение отрицательное

У меня есть пандас DataFrame с положительными и отрицательными значениями в виде гистограммы. Я хочу построить положительные цвета "зеленый" и отрицательные значения "красный" (очень оригинально... смеется). Я не уверен, как пройти, если> 0 "зеленый", иначе <0 "красный"?

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

bar plot

Ответ 1

Я бы создал фиктивный столбец для того, является ли наблюдение больше 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'}))

bar plot with positives green and negatives red

Также вы можете быть осторожны, чтобы имена столбцов не пересекались с атрибутами DataFrame. DataFrame.values предоставляет базовый массив для DataFrame. Наличие перекрывающихся имен не позволяет использовать синтаксис df.<column name>.

Ответ 2

Если вы хотите избежать добавления столбца, вы можете сделать решение TomAugspurger за один шаг:

data['values'].plot(kind='barh',
                    color=(data['values'] > 0).map({True: 'g',
                                                    False: 'r'}))

bar plot with positives green and negatives red