繁体   English   中英

条形图:如果值为正值与值为负值,如何选择颜色

[英]Bar Chart: How to choose color if value is positive vs value is negative

我有一个带有正值和负值的熊猫数据框,并希望将其绘制为条形图。

我想绘制正颜色“绿色”和负值“红色”(非常原始......大声笑)。

如果 > 0 'green' else < 0 'red',我不确定如何通过?

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

条形图

我会为观察值是否大于 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'}))

条形图,阳性为绿色,阴性为红色

此外,您可能需要注意不要让列名与 DataFrame 属性重叠。 DataFrame.values提供DataFrame.values的底层 numpy 数组。 名称重叠可防止您使用df.<column name>语法。

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

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

条形图,阳性为绿色,阴性为红色

定义

def bar_color(df,color1,color2):
    return np.where(df.values>0,color1,color2).T

然后

data.plot.barh(color=bar_color(data,'r','g'))

在此处输入图片说明

它也适用于多个条形系列

df=pd.DataFrame(np.random.randint(-10,10,(4,6)))
df.plot.barh(color=bar_color(df,'r','g'))

在此处输入图片说明

借鉴@Max Ghenis 的答案(这对我不起作用,但似乎是软件包中的一个小变化):

tseries = data['values']
color = (tseries > 0).apply(lambda x: 'g' if x else 'r')

splot = tseries.plot.barh(color=color) 

给出:

在此处输入图片说明

.. 你期望看到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM