Plotly:如何使用 graph_objects 创建森伯斯特子图?

lmb*_*loo 4 python plotly plotly-python

我的数据框看起来像这样:

    user    age   gender
0    23     12     male
1    24     13     male
2    25     15     female
3    26     20     male
4    27     21     male
Run Code Online (Sandbox Code Playgroud)

并使用

px.sunburst(df, path=["gender", "age"])
Run Code Online (Sandbox Code Playgroud)

给我正确的森伯斯特图,其中性别位于饼图的中间部分,并且对于每个性别,它都有相关的年龄。

我想使用 graph_objects 而不是 plotly express 来做到这一点,因为我希望两个旭日图并排。

从 df 我上面有我如何在graph_objects中使用它。我不明白要向标签、父母、ID 等添加什么值...

fig = go.Figure()

fig.add_trace(
    go.Sunburst(
        lables = df.age,
        parents = df.gender,
        domain=dict(column=0)
    )
)

fig.show()
Run Code Online (Sandbox Code Playgroud)

我已经阅读了文档,但是我无法理解它是如何工作的。如果有人知道,请告诉我如何使用我上面的 df 使用 graph_object 创建森伯斯特图。

ves*_*and 9

答案:

只需使用 px 构建一个图形,然后从那里“窃取”所有图形元素,然后在 graph_objects 图形中使用它来获得您需要的东西!


细节:

如果px确实为您提供了所需的旭日图,如下所示:

情节 1:

在此处输入图片说明

代码 1:

# imports
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px

# data
df = pd.DataFrame({'user':  [23, 24, 25,    26, 27],
                   'age':   [12, 13,15, 20, 21],
                   'gender':    ['male','male', 'female','male', 'male'] })

# plotly express figure
fig = px.sunburst(df, path=["gender", "age"])
fig.show()
Run Code Online (Sandbox Code Playgroud)

然后,据我所知,您必须重构数据才能使用graph_objects. 目前,您的数据具有以下形式

在此处输入图片说明

并且graph_objects需要label = ['12', '13', '15', '20', '21', 'female', 'male']. 所以现在怎么办?经历为每个元素找到正确数据结构的痛苦吗?不,只需使用 构建一个图形px,然后从那里“窃取”所有图形元素并在graph_objects图形中使用它:

代码 2:

# imports
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px

# data
df = pd.DataFrame({'user':  [23, 24, 25,    26, 27],
                   'age':   [12, 13,15, 20, 21],
                   'gender':    ['male','male', 'female','male', 'male'] })

# plotly express figure
fig = px.sunburst(df, path=["gender", "age"])

# plotly graph_objects figure
fig2 =go.Figure(go.Sunburst(
                labels=fig['data'][0]['labels'].tolist(),
                parents=fig['data'][0]['parents'].tolist(),
                            )
                )
fig2.show()
Run Code Online (Sandbox Code Playgroud)

情节 2:

在此处输入图片说明

现在,如果您想在同一个图中显示数据集的更多特征,只需添加ids=fig['data'][0]['ids'].tolist()到组合中:

情节 3:

在此处输入图片说明

完整代码:

# imports
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px

# data
df = pd.DataFrame({'user':  [23, 24, 25,    26, 27],
                   'age':   [12, 13,15, 20, 21],
                   'gender':    ['male','male', 'female','male', 'male'] })

# plotly express figure
fig = px.sunburst(df, path=["gender", "age"])

# plotly graph_objects figure
fig2 =go.Figure(go.Sunburst(
    labels=fig['data'][0]['labels'].tolist(),
    parents=fig['data'][0]['parents'].tolist(),
    values=fig['data'][0]['values'].tolist(),
    ids=fig['data'][0]['ids'].tolist(),
    domain={'x': [0.0, 1.0], 'y': [0.0, 1.0]}
))

fig2.show()
Run Code Online (Sandbox Code Playgroud)