按行格式化 Table

Formatting Plotly Table by row

我正在尝试使用 Plotly 和 SQL

创建一个 table 视觉对象

我已经设法提取所需格式的数据并使用 SQL 添加了摘要行。

但我需要将最后一行“总计”的格式设置为粗体并使用更大的字体。

是否可以在 jupyter 中使用 plotly?

fig = go.Figure(data=[go.Table(
    header=dict(values=['<b>Product Group<b>','<b>Quantity Sold<b>', '<b>Sales<b>'],
                fill_color='white',
                align='center',
                font_size = 15),
    cells=dict(values=[PQS.ProductGroup, PQS.Quantity, PQS.Price],
               fill_color='white',
               align='center',
               format=[None,",d",",d"],
               suffix=[None, ' Units',' EGP'],
               font_size=12,
               ))
])

fig.show()

试图达到与此类似的外观。

此图像来自 Tableau,迁移的原因是通过 python

更容易实现自动化和报告

有没有办法在 Plotly 中复制这种格式?或者我应该使用另一个库?

我不认为 Plotly 可以格式化 table 的单个行,因为你选择的列的所有行都被一次传递给 cells

但是,一种解决方法是复制您的 DataFrame PQS(以便在需要时保留原始 table 中的数字),转换这个新的 table 为对象或字符串类型,将所有格式更改应用于这些列(包括带小数和逗号的格式数字),然后在传递此之前将 html 标记 <b>...</b> 添加到最后一行新格式化的 PQS 副本到 go.Table.

例如:

import plotly.graph_objects as go
import pandas as pd

## reproduce your example with a similar dataframe
PQS = pd.DataFrame({
    'ProductGroup': [None,'Beverages','Others','Pizzas','Trattoria','Total'],
    'Quantity':[37,341,67,130,25,600],
    'Price':[1530,10097,3810,18625,4110,38172]
})

PQS_formatted_strings = PQS.copy()

for col in ["Quantity","Price"]:
    PQS_formatted_strings[col] = PQS_formatted_strings[col].map('{:,d}'.format)

PQS_formatted_strings["Quantity"] = PQS_formatted_strings["Quantity"] + ' Units'
PQS_formatted_strings["Price"] = PQS_formatted_strings["Price"] + ' EGP'

## add bold html tags to the last row
last_row = PQS_formatted_strings.iloc[-1,:].values
new_last_row = ['<b>' + entry + '</b>' for entry in last_row]
PQS_formatted_strings.iloc[-1,:] = new_last_row

fig = go.Figure(data=[go.Table(
    header=dict(values=['<b>Product Group</b>','<b>Quantity Sold</b>', '<b>Sales</b>'],
                fill_color='white',
                align='center',
                font_size = 15),
    cells=dict(values=[PQS_formatted_strings.ProductGroup, PQS_formatted_strings.Quantity, PQS_formatted_strings.Price],
               fill_color='white',
               align='center',
               font_size=12,
               ))
])

fig.show()