我有以下脚本,通过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文档似乎没有帮助。
这一节有点隐含的意思 基于变量的细胞色. 在这里,我将在你的情况下做什么。
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()
更新
如果你想改变文字颜色
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()