python - 根据数据更改图表列颜色
问题描述
我有一个解析 csv 文件并从中创建混合图表的 python 脚本。
如果当前进度自上一个进度以来下降了 5 以上,我想将 CurrentProg 栏的颜色更改为红色。是否有可能做到这一点?
例如,下表是我正在解析的 csv 文件的示例。我希望 Derick 和 Lisa 的 CurrentProg 条为红色,如下图所示。
名称 OldProg PrevProg CurrentProg Goal
Derick 45 60 52 90
Jenna 56 87 89 90
Lisa 78 93 76 90
Harry 98 84 79 90
这是解析 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")
如果我需要进一步澄清任何事情,请告诉我。谢谢你。
解决方案
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)
推荐阅读
- java - 如何在运行时从选择列表框中动态选择选项?Selenium_Java
- macos - 在支持 GPU 的 iMac M1 上安装 XGBoost
- haskell - 如何证明一个内射类型族的类型参数是等价的?
- python - Python中模型和filter_by错误之间的关系
- python - 如何在视频中显示圆坐标和边框
- javascript - TypeError:无法读取未定义的属性(读取“作者”)
- c++ - lldb - 在调试时将十六进制值作为输入传递
- r - 我想将多个输入用户界面(如过滤器)与 ShinyApp 链接
- firebase - Firebase Cloud Functions 最小实例设置似乎被忽略了
- javascript - 为什么我的 javascript 代码没有按预期工作