根据数据更改图表列的颜色

时间:2019-12-20 23:11:37

标签: python matplotlib

我有一个python脚本,可解析csv文件并从中创建混合图表。

如果自上一个进度以来当前进度下降了5以上,我想将CurrentProg栏的颜色更改为红色。是否有可能做到这一点?

例如,下表是我正在解析的csv文件的示例。我希望Derick和Lisa的CurrentProg栏为红色,如下图所示。

  

名称OldProg PrevProg CurrentProg目标
  德里克45 60 52 90
  珍娜56 87 89 90
  莉莎78 93 76 90
  哈利98 84 79 90

enter image description here

这是解析csv文件并将其放入图表的长条/折线的代码片段。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("file.csv")
names = df['name'].values
x = np.arange(len(names))*2
w = 0.40
plt.bar(x-w, df['Old Progress'].values, width=w*0.7, label='OldProg', color = "cyan")
plt.bar(x, df['Previous Progress'].values, width=w*0.7, label='PrevProg', color = "green")
plt.bar(x+w, df['Current Progress'].values, width=w*0.7, label='CurrentProg', color = "blue")
plt.plot(x, df['Goal'].values, lw=2, label='Goal', color = "red")

如果需要进一步澄清,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

plt.bar()可以接受与条形图中的项目数相同长度的颜色列表,而不仅仅是一种颜色。

因此,您可以计算条形图中每个元素的颜色,并将其作为colors参数传递。

类似这样的方法应该可以解决问题:

df = pd.read_csv('test.csv')
progress_difference = df['CurrentProg'] - df['PrevProg']
colors = ['Red' if d < -5 else 'Grey' for d in progress_difference]
...
plt.bar(x+w, df['CurrentProg'].values, width=w*0.7, 
        label='CurrentProg', color = colors)