Изменение цвета текста ячеек в таблице Plotly на основе значения (строки) - PullRequest
1 голос
/ 08 мая 2020

У меня есть следующий сценарий, который превращает pandas фрейм данных в интерактивную html таблицу с Plotly:


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"))

Таблица содержит столбец с именем «Вывод», который может иметь одно из трех значений для каждой строки: «ДА», «НЕТ» и «ГРАНИЦА».

Я хочу иметь возможность изменять цвет текста в столбце «Вывод», чтобы «ДА» было зеленым, «НЕТ» "красный, а" BORDERLINE "синий.

Есть идеи, как я мог это сделать? Сюжетная документация, похоже, не помогает.

1 Ответ

2 голосов
/ 08 мая 2020

Это как бы неявно в этом разделе цвет ячейки на основе переменной . Вот что я сделаю в вашем случае.

Данные

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

...