You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多条件逻辑整合为Plotly表格的字体颜色变量?

为Plotly表格实现动态字体颜色(含固定列颜色)

问题描述

我需要为Plotly表格的cells.font.color参数创建动态颜色规则:

  • 第一列(Block Number)所有单元格字体固定为黑色
  • 第二列(WoW Chg%)根据数值动态变色:
    1. 数值≤-0.05 → 红色
    2. 数值在(-0.05, 0.05]区间 → 黑色
    3. 数值>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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:30:46