use*_*920 17 python matplotlib pandas
我有一个带有正值和负值的Pandas DataFrame作为条形图.我想绘制正面颜色'绿色'和负面值'红色'(非常原始...大声笑).如果> 0'green'else <0'red',我不知道如何通过?
data = pd.DataFrame([[-15], [10], [8], [-4.5]],
index=['a', 'b', 'c', 'd'],
columns=['values'])
data.plot(kind='barh')
Run Code Online (Sandbox Code Playgroud)

Tom*_*ger 20
我会为观察是否大于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'}))
Run Code Online (Sandbox Code Playgroud)
此外,您可能需要注意不要让列名与DataFrame属性重叠.DataFrame.values为DataFrame提供底层的numpy数组.重叠名称会阻止您使用df.<column name>语法.
Max*_*nis 20
如果你想避免添加一列,你可以一步完成TomAugspurger的解决方案:
data['values'].plot(kind='barh',
color=(data['values'] > 0).map({True: 'g',
False: 'r'}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10638 次 |
| 最近记录: |