Matplotlib基于值的条形图的不同颜色

tho*_*mac 2 python matplotlib yahoo-finance pandas

我正在绘制部门及其所有股票的收益。我希望值> 100为绿色,而<100为红色。这是我的代码:

sector_lst = ['XLK','XLF','XLE']  ## etc.

for i in sector_lst:                   
    fig = plt.figure(figsize=(12, 8)) 

    for x in sectordict[i]:                #sectordict[i] is all the stocks in a sector (so AAPL, GOOG, etc. for tech) 
        if pct_change[x] > 1:              
             pct_change[sectordict[i]].plot(kind='bar',color='g') 

        ##if pct_chg < 1
        else:                              
             pct_change[sectordict[i]].plot(kind='bar',color='r') 


plt.title(i)
Run Code Online (Sandbox Code Playgroud)

到目前为止,这会将整个扇区图形返回为绿色或红色。如果第一个值大于100,则所有库存均为绿色,反之亦然。

我的预期输出是有11张图(当前它会这样做),但是图中的每种股票都有不同的颜色,如果股票的回报率> 100%,则显示绿色,而<100%,则显示红色。

Kac*_*ski 6

在使用Pandas plot()进行了几次尝试之后,我没有找到实现您所期望的方法,但是您可以直接使用Matplotlib轻松地做到这一点。

我希望这个能帮上忙:

我创建了示例df:

df = pd.DataFrame({'a' : [2,6,2,4,5,3,7]})
Run Code Online (Sandbox Code Playgroud)

并且我创建了两个temp df,它将仅存储满足条件的值:

t1 = df[df['a']<5]
t2 = df[df['a']>=5]
Run Code Online (Sandbox Code Playgroud)

然后将其绘制:

plt.bar(t1.index.values, t1['a'], color='r')
plt.bar(t2.index.values, t2['a'], color='g')
Run Code Online (Sandbox Code Playgroud)

最终结果如下所示:

在此处输入图片说明

那是您所期望的吗?