根据数值(字符串)改变Plotly表格中单元格的文字颜色。

问题描述 投票:0回答:1

我有以下脚本,通过Plotly将pandas数据框架变成一个交互式html表格。


goals_output_df = pd.read_csv(os.path.join(question_dir, "data/output.csv"))

fig = go.Figure(data=[go.Table(
    columnwidth = [15,170,15,35,35],
    header=dict(values=['<b>' + x + '</b>' for x in list(goals_output_df.columns)],
                # fill_color='#b9e2ff',
                line_color='darkslategray',
                align='center',
                font=dict(color='black', family="Lato", size=20),
                height=30
                ),
    cells=dict(values=[goals_output_df[column] for column in goals_output_df.columns],
            #    fill_color='#e6f2fd',
               line_color='darkslategray',
               align='left',
               font=dict(color='black', family="Lato", size=20),
               height=30
               ))
])

fig.update_layout(
title="<b>Output summary for %s</b>"%question.strip('question'),
font=dict(
    family="Lato",
    size=18,
    color="#000000"))

fig.write_html(os.path.join(question_dir, "results/output.html"))

该表包含一个名为 "Output "的列,每行可以有三个值之一: "YES"、"NO "和 "BORDERLINE"。

我希望能够改变 "输出 "列中文本的颜色,使 "YES "为绿色,"NO "为红色,"BORDERLINE "为蓝色。

有什么办法可以做到这一点吗?Plotly文档似乎没有帮助。

python html css pandas plotly
1个回答
2
投票

这一节有点隐含的意思 基于变量的细胞色. 在这里,我将在你的情况下做什么。

资料

import pandas as pd
import plotly.graph_objects as go
df = pd.DataFrame({"name":["a", "b", "c", "d"],
                   "value":[100,20,30,40],
                   "output":["YES", "NO", "BORDERLINE", "NO"]})

map_color = {"YES":"green", "NO":"red", "BORDERLINE":"blue"}

df["color"] = df["output"].map(map_color)

cols_to_show = ["name", "value", "output"]

哪儿 cols_to_show 是您想在表中显示的唯一列。

填充颜色

这里您希望在所有列中使用标准单元格背景,但不包括 output 一个

fill_color = []
n = len(df)
for col in cols_to_show:
    if col!='output':
        fill_color.append(['#e6f2fd']*n)
    else:
        fill_color.append(df["color"].to_list())

data=[go.Table(
#     columnwidth = [15,20,30],
    header=dict(values=[f"<b>{col}</b>" for col in cols_to_show],
                # fill_color='#b9e2ff',
                line_color='darkslategray',
                align='center',
                font=dict(color='black', family="Lato", size=20),
                height=30
                ),
    cells=dict(values=df[cols_to_show].values.T,
               fill_color=fill_color,
               line_color='darkslategray',
               align='left',
               font=dict(color='black', family="Lato", size=20),
               height=30
               ))
]

fig = go.Figure(data=data)
fig.show()

enter image description here

更新

改变文字颜色

如果你想改变文字颜色

text_color = []
n = len(df)
for col in cols_to_show:
    if col!='output':
        text_color.append(["black"] * n)
    else:
        text_color.append(df["color"].to_list())

data=[go.Table(
#     columnwidth = [15,20,30],
    header=dict(values=[f"<b>{col}</b>" for col in cols_to_show],
                # fill_color='#b9e2ff',
                line_color='darkslategray',
                align='center',
                font=dict(color='black', family="Lato", size=20),
                height=30
                ),
    cells=dict(values=df[cols_to_show].values.T,

               line_color='darkslategray',
               align='left',
               font=dict(color=text_color, family="Lato", size=20),
               height=30
               ))
]

fig = go.Figure(data=data)
fig.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.