如何将多条件逻辑整合为Plotly表格的字体颜色变量?
为Plotly表格实现动态字体颜色(含固定列颜色)
问题描述
我需要为Plotly表格的cells.font.color参数创建动态颜色规则:
- 第一列(Block Number)所有单元格字体固定为黑色
- 第二列(WoW Chg%)根据数值动态变色:
- 数值≤-0.05 → 红色
- 数值在(-0.05, 0.05]区间 → 黑色
- 数值>0.05 → 绿色
现有代码片段如下:
fig_positions = go.Figure(data=go.Table( header=dict(values=list(df_new.columns)), cells=dict(values=[df_new['Block Number'], df_new['WoW Chg%']], font=dict(color=create_font_color(df_new['WoW Chg%']))
尝试编写create_font_color函数但无法整合逻辑,请问如何实现符合要求的font_color变量?
解决方案
Plotly表格的cells.font.color接受二维列表格式,每个子列表对应一列的所有单元格颜色。我们可以分别处理两列的颜色规则,再组合成目标格式:
方法1:使用numpy.where生成颜色列表
import numpy as np import plotly.graph_objects as go # 生成第二列的动态颜色 wow_colors = np.where( df_new['WoW Chg%'] <= -0.05, 'red', np.where(df_new['WoW Chg%'] > 0.05, 'green', 'black') ) # 生成第一列的固定黑色列表 block_colors = ['black'] * len(df_new) # 组合成font.color需要的格式 font_color = [block_colors, wow_colors.tolist()] # 转成list适配Plotly # 插入到表格代码中 fig_positions = go.Figure(data=go.Table( header=dict(values=list(df_new.columns)), cells=dict( values=[df_new['Block Number'], df_new['WoW Chg%']], font=dict(color=font_color) ) ))
方法2:用pandas.apply自定义函数
如果偏好使用pandas,可以写一个单值处理函数再批量应用:
import plotly.graph_objects as go def get_wow_color(value): if value <= -0.05: return 'red' elif value > 0.05: return 'green' else: return 'black' # 生成第二列颜色 wow_colors = df_new['WoW Chg%'].apply(get_wow_color).tolist() block_colors = ['black'] * len(df_new) font_color = [block_colors, wow_colors] # 表格代码同上
关键说明
cells.font.color的结构必须和values一一对应:values是[列1数据, 列2数据],color就要是[列1颜色列表, 列2颜色列表]- 拆分列处理逻辑可以避免单函数同时处理多规则的混乱,更易维护
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

