基于值的颜色条形图

我正在尝试根据一个值为每个条着色,如here

所述

我尝试了一个简单的代码,并且有效:

df=pd.DataFrame([95,94,99,90,89,91,92,85],columns=["Value"])
mask1 = df.Value < 90
mask2 = df.Value >= 90
bar=plt.bar( df.index[mask1],df.Value[mask1],color='red')
bar=plt.bar( df.index[mask2],df.Value[mask2],color='blue')
plt.hlines(90,7);

基于值的颜色条形图

问题在于,当我将其应用于数据集时,列的顺序会更改。原始数据是:
         . %REALIZADAS MÊS JANEIRO 96 FEVEREIRO 86 MARÇO 94 ABRIL 96 MAIO 85 JUNHO 92 JULHO 96 AGOSTO 92 SETEMBRO 94 OUTOBRO 94 NOVEMBRO 97 DEZEMBRO 94

我用
画出来  plt.bar(coleta.index,coleta['%REALIZADAS']) plt.xticks(rotation=90)
此图的结果:

基于值的颜色条形图

我尝试了这段代码:

mask1= coleta["%REALIZADAS"]>=90
mask2= coleta["%REALIZADAS"]<90
bar=plt.bar(coleta.index[mask1],coleta['%REALIZADAS'][mask1],color="blue")
bar=plt.bar(coleta.index[mask2],coleta['%REALIZADAS'][mask2],color="red")
plt.xticks(rotation=90)
plt.hlines(90,11,color='black')

但得出此图表:

基于值的颜色条形图

如何保持列的顺序?

Jzh1988 回答:基于值的颜色条形图

您没有发布数据框,但我认为数据框的索引不是数字而是每个月的名称,我认为这像我在此处故意这样做的那样是在偏离列的位置:

import pandas as pd 
import matplotlib.pyplot as plt
%matplotlib inline

df=pd.DataFrame([95,94,99,90,89,91,92,85],columns=["Value"])
df.index = ["a{}".format(i) for i in range(len(df))]  #<--- my fault!

mask1 = df.Value < 90
mask2 = df.Value >= 90

bar=plt.bar( df.index[mask1],df.Value[mask1],color='red')
bar=plt.bar( df.index[mask2],df.Value[mask2],color='blue')
plt.hlines(90,7)

一个可能的解决方案是:

import pandas as pd 
import matplotlib.pyplot as plt
%matplotlib inline

df=pd.DataFrame([95,columns=["Value"])

df["colors"] = "red"
df["colors"].mask(df.Value >= 90,"blue",inplace=True)

plt.bar([i for i in range(len(df))],df["Value"],color=df["colors"])
plt.show()

我创建另一个名为colors的列,并将其初始化为所有red。然后根据条件df.Value >= 90,将适当的单元格颜色设置为blue
然后,我将其传递给带有color参数的条形图,并且为了确保索引是正确的,我只创建了一个包含0len(df)的整数的列表。

希望有帮助!

本文链接:https://www.f2er.com/3143527.html

大家都在问