gpt4 book ai didi

python - Plotly:将自定义文本添加到 px.Treemap 视觉

转载 作者:行者123 更新时间:2023-12-05 02:00:25 26 4
gpt4 key购买 nike

我正在使用 plotly express 制作树状图。我想用标签以及父级的 % 和色标中使用的值来注释我的数据扇区。

如何添加注释以显示在树状图的 color 参数中使用的实际值?在下面的示例代码中,我想为每个部门注释“薪水”。我还想添加一些额外的文字来描述每个部门的数字。例如,将“占总数的百分比:”附加到百分比值以获得更多文本描述将是帮助对 TreeMap 进行更多注释的理想选择。任何添加自定义文本的方法都是有益的。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px

d = {'count': [1,1,1,2,2,3,3,3,4],
'name': ['bob','bob','bob','shelby','shelby','jordan','jordan','jordan','jeff'],
'type': ['type1','type2','type4','type1','type6','type5','type8','type2',None],
'salary':[1000,2000,3000,10000,15000,30000,100000,50000,25000]}
df = pd.DataFrame(data=d)

# group data and aggregate
df_plot = df.groupby(['name','type'])[['salary','count']].sum().reset_index()

avg_salary = df_plot['salary'].sum()/df_plot['count'].sum()

# plot treemap
fig = px.treemap(df_plot,
values='count',
color='salary',
color_continuous_scale='balance',
color_continuous_midpoint=avg_salary,
path=['type','name'])
fig.data[0].textinfo = 'label+value+percent parent'
fig.show()

最佳答案

您可以在 fig.data[0].customdata 中存储一个 numpy 数组,然后从 texttemplate 字符串访问变量 customdata

在你的例子中,因为你想注释百分比和薪水(并且可能添加更多注释)我们可以将这两个存储在我们设置的 nx2 numpy 数组中 fig.data[ 0].customdata 等于。然后,我们将使用 texttemplate 中的 customdata[0]customdata[1] 访问数组的每个切片。

编辑:正如@Coldchain9 所指出的,要传递给 px.treemap 的 DataFrame 需要先按名称和类型排序,然后才能为自定义数据创建百分比和薪水,以正确匹配 TreeMap 上的名称和类型。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px

d = {'count': [1,1,1,2,2,3,3,3,4],
'name': ['bob','bob','bob','shelby','shelby','jordan','jordan','jordan','jeff'],
'type': ['type1','type2','type4','type1','type6','type5','type8','type2',None],
'salary':[1000,2000,3000,10000,15000,30000,100000,50000,25000]}
df = pd.DataFrame(data=d)

# group data and aggregate
df_plot = df.groupby(['name','type'])[['salary','count']].sum().reset_index()
df_plot.sort_values(by=['name','type'],inplace=True)

avg_salary = df_plot['salary'].sum()/df_plot['count'].sum()

# plot treemap
fig = px.treemap(df_plot,
values='count',
color='salary',
color_continuous_scale='balance',
color_continuous_midpoint=avg_salary,
path=['type','name'])
# fig.data[0].textinfo = 'label+value+percent parent'
percents = (100*df.salary / sum(df.salary)).tolist()
salaries = df.salary.tolist()

## store multiple lists of data in customdata
fig.data[0].customdata = np.column_stack([salaries, percents])
fig.data[0].texttemplate = "%{label}<br>%{value}<br>Salary:$%{customdata[0]}<br>Percent of total:%{customdata[1]:.2f}%"
fig.show()

enter image description here

关于python - Plotly:将自定义文本添加到 px.Treemap 视觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67391994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com