Plotly: 如何使用graph_objects创建旭日图子图?

7

我的数据框大致如下:

    user    age   gender
0    23     12     male
1    24     13     male
2    25     15     female
3    26     20     male
4    27     21     male

并使用

px.sunburst(df, path=["gender", "age"])

为每个性别关联年龄数据,生成正确的太阳花图。其中性别在饼图中间部分。

我想使用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()

我已阅读文档,但无法理解其工作原理。如有人知道,请告诉我如何使用上述 df 使用 graph_object 创建 sunburst 图。

1个回答

15

答案:

只需使用px构建一个图形,然后从中“借”所有图形元素并在graph_objects图形中使用即可获得所需的结果!


详细信息:

如果px确实可以像这样给您所需的太阳辐射图表:

图1:

enter image description here

代码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()

据我所知,您需要重新构建数据以使用graph_objects。目前,您的数据格式如下:

enter image description here

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()

情节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()

1
感谢您的时间和精彩的解释! - haneulkim
1
@Ambleu 很高兴能帮忙! - vestland
1
很好的解释。谢谢!省了我很多时间。 - Dominique Paul
谢谢您先生。但我有一个问题,如何使它看起来像整个圆,而不是部分呢? - Tugay
1
@Tugay 你需要添加 branchvalues='total'。更多信息请参见 https://plotly.com/python/sunburst-charts/#branchvalues - m1lhaus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接