Plotly中为热力图每行设置独立颜色范围的实现方案
解决方案:实现每行独立颜色映射的热力图
问题核心是Plotly默认使用全局颜色范围,只有全局最大值会显示绿色。要实现类似Excel每行独立条件格式的效果,需要先对每行数据做归一化处理,将每行数值缩放到0-1区间,让每行的最高值对应颜色刻度的最大值(绿色),最低值对应最小值(红色)。
步骤与代码实现
- 读取原始CSV数据
- 对每行独立归一化:按自身的最小值和最大值将数据缩放到0-1区间,同时处理整行数值相同的边界情况(避免除以0报错)
- 绘制热力图:用归一化后的数据绘图,同时绑定原始数据到hover提示,保留真实数值查看能力
完整代码:
import plotly.express as px import pandas as pd # 读取CSV数据 df = pd.read_csv('test0.csv', header=None) # 每行独立归一化处理 df_normalized = df.apply( lambda row: (row - row.min()) / (row.max() - row.min()) if row.max() != row.min() else 0, axis=1 ) # 绘制热力图,绑定原始数据到hover提示 fig = px.imshow( df_normalized, color_continuous_scale=['red', 'green'], hover_data=df.values.tolist() ) # 隐藏颜色刻度条 fig.update_coloraxes(showscale=False) # 自定义hover提示格式,显示原始数值 fig.update_traces( hovertemplate='小时: %{x}<br>星期: %{y}<br>数值: %{customdata}<extra></extra>' ) fig.show()
效果说明
- 每行的最高值都会显示绿色,最低值显示红色,中间值按比例过渡颜色
- Hover提示会显示原始真实数值,不会因归一化丢失信息
- 兼容整行数值相同的边界场景,避免运行报错
内容的提问来源于stack exchange,提问作者teduniq
相关产品推荐
相关产品推荐

