按行格式化 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()
我正在尝试使用 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()