Matplotlib条形图如果值为正,则选择颜色;如果值为负,则选择颜色

2024-04-28 16:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,用正值和负值作为条形图。我想画出正的颜色“绿色”和负的值“红色”(非常原始…哈哈)。如果>;0“绿色”否则<;0“红色”,我不知道如何通过?

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

bar plot


Tags: columns数据ltgtdataframepandasdataindex
2条回答

我将为观察值是否大于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为数据帧提供底层numpy数组。有重叠的名称会阻止您使用df.<column name>语法。

如果要避免添加列,可以一步完成tomaugspugger的解决方案:

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

bar plot with positives green and negatives red

相关问题 更多 >