Plotly:在 sunburst 中添加平行特征,其大小与父类成比例

问题描述

一个复杂的旭日形图表中,我想将多个子类添加一个父类中。我已尝试为 names,parents,values 赋值,如图 here。但它返回一个空白数字。我尝试创建一个 path 变量(在下面的代码中),但我不确定如何将多个直接子级命名为单个父类。这就是我想要的-

enter image description here

这里是重现的代码-

import pandas as pd
import plotly.express as px

df = pd.DataFrame({'continent':['SA','SA','NA','NA'],'country':['Brazil','Uruguay','USA','Canada'],'total_vaccinations':[100,80,400,200],'people_vaccinated':[40,20,100,80],'people_fully_vaccinated':[8,4,11,11]})

px.sunburst(df,path=['continent','country'],values='total_vaccinations')

我想要 people_vaccinatedpeople_fully_vaccinated 特征作为描述 total_vaccinations 的各个国家的孩子。我希望它们的大小与它们的价值成正比。将不胜感激!

解决方法

如您所见,有两种方法可以使用 px.sunburst() 创建旭日图。使用 path 变量或使用 namesparentsvalues 变量。

带有 path 变量的第一个变体适用于矩形数据,因此不适合您,因为您有缺失值。虽然矩形数据可能存在缺失值,但它要求缺失值的父项没有其他条目 (plotly ref)

因此,您必须使用第二种变体。由于您有一些名称相同的叶子,因此除了 namesparentsvalues 之外,还需要定义一个具有唯一字符串的列表 ids

import pandas as pd
import plotly.express as px


data = {
  'ids':['SA','NA','Brazil','Uruguay','USA','Canada','PFV Brazil','PV Brazil','PFV Uruguay','PV Uruguay','PFV USA','PV USA','PFV Canada','PV Canada'],'labels': ['SA','PFV','PV','PV'],'parent': ['','','SA','Canada'],'value': [0,100,80,400,200,8,40,4,20,11,80]
  }

fig =px.sunburst(data,names='labels',parents='parent',values='value',ids='ids')
fig.show()

结果将如下所示: sunburst graph