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

如何在Plotly表格中对含"All"的行进行字体加粗高亮

需求说明

需要在Plotly生成的表格中,将Building、Floor或Team列包含"All"的行设置为字体加粗,实现高亮效果。

原代码

headerColor = 'darkgrey'
rowEvenColor = 'lightgrey'
rowOddColor = 'white'

fig_occ_fl_team = go.Figure(data=[go.Table(
  header=dict(
    values=list(final_table_occ_fl_team.columns),
    line_color='black',
    fill_color=headerColor,
    align=['left','left','left','left','left','left','left','left','left','left'],
    font=dict(color='black', size=9)
  ),
  cells=dict(
    values=[final_table_occ_fl_team['Building'], 
            final_table_occ_fl_team['Floor'], 
            final_table_occ_fl_team['Team'], 
            final_table_occ_fl_team['Number of Desks'], 
            final_table_occ_fl_team['Avg Occu (#)'], 
            final_table_occ_fl_team['Avg Occu (%)'], 
            final_table_occ_fl_team['Avg Occu 10-4 (#)'], 
            final_table_occ_fl_team['Avg Occu 10-4 (%)'], 
            final_table_occ_fl_team['Max Occu (#)'], 
            final_table_occ_fl_team['Max Occu (%)'], 
           ],
    line_color='black',
    fill_color = [[rowOddColor,rowEvenColor]*56],
    align = ['left','left','left','left','left','left','left','left','left','left'],
    font = dict(color = 'black', size = 7)
    ))
])

fig_occ_fl_team.show()

数据集

data = {'Building': {0: 'All',
  1: '1LWP',
  2: '1LWP',
  3: '1LWP',
  4: '1LWP',
  5: '1LWP',
  6: '1LWP',
  7: '1LWP',
  8: '1LWP',
  9: '1LWP'},
 'Floor': {0: 'All',
  1: 'All',
  2: '2nd',
  3: '2nd',
  4: '2nd',
  5: '2nd',
  6: '2nd',
  7: '2nd',
  8: '2nd',
  9: '2nd'},
 'Team': {0: 'All',
  1: 'All',
  2: 'All',
  3: 'Anderson/Money',
  4: 'Banking & Treasury',
  5: 'Charities',
  6: 'Client Management',
  7: 'Compliance, Legal & Risk',
  8: 'DFM',
  9: 'Emmerson'},
 'Number of Desks': {0: 2297,
  1: 2008,
  2: 381,
  3: 22,
  4: 8,
  5: 19,
  6: 9,
  7: 41,
  8: 20,
  9: 33},
 'Avg Occu (#)': {0: 1261,
  1: 1126,
  2: 195,
  3: 14,
  4: 4,
  5: 9,
  6: 5,
  7: 21,
  8: 13,
  9: 18},
 'Avg Occu (%)': {0: '55%',
  1: '56%',
  2: '51%',
  3: '64%',
  4: '50%',
  5: '48%',
  6: '56%',
  7: '52%',
  8: '65%',
  9: '55%'},
 'Avg Occu 10-4 (#)': {0: 851,
  1: 759,
  2: 132,
  3: 8,
  4: 3,
  5: 6,
  6: 3,
  7: 14,
  8: 9,
  9: 12},
 'Avg Occu 10-4 (%)': {0: '37%',
  1: '38%',
  2: '35%',
  3: '37%',
  4: '38%',
  5: '32%',
  6: '34%',
  7: '35%',
  8: '45%',
  9: '37%'},
 'Max Occu (#)': {0: 1901,
  1: 1680,
  2: 274,
  3: 22,
  4: 6,
  5: 13,
  6: 7,
  7: 27,
  8: 17,
  9: 25},
 'Max Occu (%)': {0: '83%',
  1: '84%',
  2: '72%',
  3: '100%',
  4: '75%',
  5: '69%',
  6: '78%',
  7: '66%',
  8: '85%',
  9: '76%'}}
解决方案

核心思路是先判断每行是否满足"Building/Floor/Team列含All"的条件,生成对应字体粗细的列表,再将这个列表传给表格单元格的字体权重参数。

修改后的完整代码:

import plotly.graph_objects as go
import pandas as pd

# 将数据集转为DataFrame
final_table_occ_fl_team = pd.DataFrame(data)

headerColor = 'darkgrey'
rowEvenColor = 'lightgrey'
rowOddColor = 'white'

# 生成字体粗细列表:满足条件的行设为bold,否则normal
font_weights = []
for idx, row in final_table_occ_fl_team.iterrows():
    if row['Building'] == 'All' or row['Floor'] == 'All' or row['Team'] == 'All':
        font_weights.append('bold')
    else:
        font_weights.append('normal')

# 适配多列:Plotly需要与列数匹配的二维权重列表
font_weight_list = [font_weights for _ in range(len(final_table_occ_fl_team.columns))]

fig_occ_fl_team = go.Figure(data=[go.Table(
  header=dict(
    values=list(final_table_occ_fl_team.columns),
    line_color='black',
    fill_color=headerColor,
    align=['left']*10,
    font=dict(color='black', size=9)
  ),
  cells=dict(
    values=[final_table_occ_fl_team['Building'], 
            final_table_occ_fl_team['Floor'], 
            final_table_occ_fl_team['Team'], 
            final_table_occ_fl_team['Number of Desks'], 
            final_table_occ_fl_team['Avg Occu (#)'], 
            final_table_occ_fl_team['Avg Occu (%)'], 
            final_table_occ_fl_team['Avg Occu 10-4 (#)'], 
            final_table_occ_fl_team['Avg Occu 10-4 (%)'], 
            final_table_occ_fl_team['Max Occu (#)'], 
            final_table_occ_fl_team['Max Occu (%)'], 
           ],
    line_color='black',
    # 根据行数自动生成交替行颜色,替代硬编码
    fill_color = [rowOddColor if i%2==0 else rowEvenColor for i in range(len(final_table_occ_fl_team))],
    align = ['left']*10,
    font = dict(color = 'black', size = 7, weight=font_weight_list)
    ))
])

fig_occ_fl_team.show()

关键说明

  1. 字体权重列表生成:遍历每行数据,判断是否有目标列包含"All",生成对应行的字体粗细标记。
  2. 多列适配:Plotly表格的font.weight参数需要传入与列数匹配的二维列表,因此将单行权重列表复制对应列数的次数。
  3. 行颜色优化:替换原代码硬编码的行颜色列表,改为根据实际行数自动生成交替颜色,提升代码灵活性。

内容的提问来源于stack exchange,提问作者Arina Belozerova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37