引言
项目需求,需要很清晰的显示出数值的差异

编码思路
数据源,确定数据源是首要目标,因为项目中的数据源是这种格式的
| col1 | col2 | col3 |
|---|---|---|
| 20240101 | 0 | 12.34 |
| 20240101 | 1 | 12.45 |
| 20240101 | 2 | 12.56 |
| 20240101 | 3 | 12.67 |
| 20240101 | 4 | 12.78 |
| 20240102 | 0 | 13.78 |
| 20240102 | 1 | 13.78 |
| ... | ... | ... |
为了保证是阶梯形状,需要手动搞一下,当然使用df.pivot(index='date', columns='col', values='value')
首先需要确认最小值和最大值,这里如果使用的是DataFrame,可以使用下面的方式获取
n_max = source[列].max()
n_min = source[列].min()
计算数值所对应的颜色
green = [68, 148, 88]
red = [226, 94, 72]
def get_color(value):
scaled_value = 1- ( ((value - n_min) / (n_max - n_min)))
r = hex(int(scaled_value * (red[0] - green[0]) + green[0]))[2:]
g = hex(int(scaled_value * (red[1] - green[1]) + green[1]))[2:]
b = hex(int(scaled_value * (red[2] - green[2]) + green[2]))[2:]
if len(r) == 1:
r = '0' + r
if len(g) == 1:
g = '0' + g
if len(b) == 1:
b = '0' + b
print(r, g, b)
return r + g + b
上色
sheet.cell(i, j).fill = openpyxl.styles.PatternFill(start_color=get_color(sheet.cell(i, j).value),
end_color=get_color(sheet.cell(i, j).value),
fill_type='solid')
结语
主要是用于范围内颜色渐变,scaled_value 里面的 1- 也可以尝试去掉,看看差异


评论 0
还没有评论,来说点什么吧。