Python 2.7中如何根据direction1值自动设置柱状图颜色(005时设为绿色)
实现Python 2.7中柱状图的自动选色功能
嘿,我看了你的代码,问题出在循环里的判断逻辑上,咱们一步步修正它:
原脚本的问题点
- 循环变量
x是索引(0到7),不是direction1里的元素,你用x in direction1==005完全搞混了索引和元素的关系; direction1里的"005"是字符串,你写成了数字005,而且这个判断的语法本身就不对。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt # 你的原始数据集 direction1=['200','250','180','200','300','270','005','080'] time1=['0000','0030','0100','0130','0200','0230','0300','0300'] ind = np.arange(len(time1)) width = 0.50 # 注意:plt.bar需要数值类型的高度,所以先把字符串转成整数 rects1 = plt.bar(ind, [int(d) for d in direction1], width, color='r') # 用enumerate同时获取索引和对应的数据值 for idx, val in enumerate(direction1): # 严格匹配字符串"005" if val == "005": rects1[idx].set_color('g') # 添加x轴标签,让图表更清晰 plt.xticks(ind, time1) # 显示图表 plt.show()
更简洁的写法(直接生成颜色列表)
如果你不想循环修改柱子颜色,可以在创建柱状图的时候就指定好所有颜色,代码更清爽:
import numpy as np import matplotlib.pyplot as plt direction1=['200','250','180','200','300','270','005','080'] time1=['0000','0030','0100','0130','0200','0230','0300','0300'] ind = np.arange(len(time1)) width = 0.50 # 生成颜色列表:遇到"005"用绿色,其余用红色 colors = ['g' if d == '005' else 'r' for d in direction1] # 直接传入颜色列表创建柱状图 rects1 = plt.bar(ind, [int(d) for d in direction1], width, color=colors) plt.xticks(ind, time1) plt.show()
关键注意事项
- 一定要注意
direction1里的元素是字符串类型,判断时要和字符串"005"比较,不能写成数字005; plt.bar的高度参数必须是数值类型,所以要把字符串转成整数(或者浮点数),不然会抛出类型错误。
内容的提问来源于stack exchange,提问作者Azam
相关产品推荐
相关产品推荐

