Вы не опубликовали свой фрейм данных, но я предполагаю, что значения вашего фрейма данных - это не числа, а название каждого месяца, который, как я полагаю, отбрасывает расположение столбца, как я специально сделал здесь:
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,0,7)
Одним из возможных решений может быть следующее:
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["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
, и чтобы убедиться, что значения индексов верны, я просто создаюсписок с целыми числами от 0
до len(df)
.
Надеюсь, это поможет!