Plotly表格字体颜色设置异常求助:仅需高亮值>80的指定列
问题排查与修正方案
你的代码问题出在颜色规则的数组长度与表格列数不匹配,以及颜色判断逻辑未对应到目标列:
- 你仅针对4个百分比列生成了颜色列表,但表格共有6列,Plotly会循环复用该颜色数组,导致前两列(SYSTEM_ID、MVS_SYSTEM_ID)被错误染色。
- 原代码按行遍历4个百分比列的值生成颜色,未对应到每一列的独立单元格,导致判断逻辑错位,出现小于80的值变蓝的情况。
修正后的代码
import pandas as pd import plotly.graph_objs as go data = { 'SYSTEM_ID': ['XPTO', 'XPTO', 'XPTO', 'XPTX', 'XPTX', 'THE_FIRM', 'THE_FIRM', 'THE_FIRM'], 'MVS_SYSTEM_ID': ['XPTO', 'XPTB', 'XRNA', 'ZZZZ', 'CCCC', 'NABD', 'XXXX', 'YYYY'], 'MAX_CSA_USED%': [60.47, 71.41, 70.93, 35.14, 32.26, 24.1, 31.56, 22.81], 'MAX_ECSA_USED%': [51.46, 81.9, 53.8, 35.02, 34.87, 37.47, 40.88, 14.17], 'MAX_SQA_USED%': [42.52, 33.64, 42.23, 45.05, 40.61, 33.7, 25.39, 29.67], 'MAX_ESQA_USED%': [56.26, 53.55, 57.13, 34.17, 46.38, 91.31, 33.06, 77.12] } table_df = pd.DataFrame(data) table_columns = ['SYSTEM_ID', 'MVS_SYSTEM_ID', 'MAX_CSA_USED%', 'MAX_ECSA_USED%', 'MAX_SQA_USED%', 'MAX_ESQA_USED%'] # 为每一列生成独立的颜色规则 color_list = [] fill_color_list = [] for col in table_columns: if col in ['MAX_CSA_USED%', 'MAX_ECSA_USED%', 'MAX_SQA_USED%', 'MAX_ESQA_USED%']: # 目标列:根据值是否大于80设置颜色 font_colors = ['blue' if val > 80 else 'black' for val in table_df[col]] fill_colors = ['lightblue' if val > 80 else 'white' for val in table_df[col]] color_list.append(font_colors) fill_color_list.append(fill_colors) else: # 非目标列:固定黑色字体、白色背景 color_list.append(['black'] * len(table_df)) fill_color_list.append(['white'] * len(table_df)) table_fig = go.Figure(data=[go.Table( header=dict(values=table_columns), cells=dict( values=[table_df[col] if col not in ['MVS_SYSTEM_ID', 'SYSTEM_ID'] else table_df[col].astype(str) for col in table_columns], align=['center', 'center', 'right', 'right', 'right', 'right'], font=dict(color=color_list), fill=dict(color=fill_color_list) ) )]) table_fig.show()
关键改动说明
- 列级独立颜色规则:遍历每一列,为目标百分比列单独生成颜色数组,非目标列固定使用黑色字体和白色背景,避免颜色规则被循环复用。
- 单元格精准判断:针对每个目标列的单元格逐个判断值是否大于80,确保颜色规则仅作用于符合条件的单元格。
- 对齐参数补全:为6列分别设置对齐方式,避免默认值导致的布局错位。
内容的提问来源于stack exchange,提问作者trizzo
相关产品推荐
相关产品推荐

