Plotly:如何使用 graph_objects 创建 sunburst 子图?
Plotly: How to create sunburst subplot using graph_objects?
我的数据框看起来像这样:
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 来做到这一点,因为我希望两个旭日图并排。
from df 我上面有我如何在 graph_objects 中使用它。我不明白要为标签、parents、ids 等添加什么值...
fig = go.Figure()
fig.add_trace(
go.Sunburst(
lables = df.age,
parents = df.gender,
domain=dict(column=0)
)
)
fig.show()
我已经阅读了文档,但是我不明白它是如何工作的。如果有人知道,请告诉我如何使用 graph_object 和上面的 df 创建旭日图。
答案:
只需使用 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()
然后,据我所知,您必须重组数据才能使用 graph_objects
。目前,您的数据格式为
而 graph_objects
需要 label = ['12', '13', '15', '20', '21', 'female', 'male']
。所以现在怎么办?经历过为每个元素找到正确数据结构的痛苦吗?不,只需使用 px
构建 one 图形,然后从那里“窃取”所有图形元素并将其用于 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()
我的数据框看起来像这样:
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 来做到这一点,因为我希望两个旭日图并排。
from df 我上面有我如何在 graph_objects 中使用它。我不明白要为标签、parents、ids 等添加什么值...
fig = go.Figure()
fig.add_trace(
go.Sunburst(
lables = df.age,
parents = df.gender,
domain=dict(column=0)
)
)
fig.show()
我已经阅读了文档,但是我不明白它是如何工作的。如果有人知道,请告诉我如何使用 graph_object 和上面的 df 创建旭日图。
答案:
只需使用 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()
然后,据我所知,您必须重组数据才能使用 graph_objects
。目前,您的数据格式为
而 graph_objects
需要 label = ['12', '13', '15', '20', '21', 'female', 'male']
。所以现在怎么办?经历过为每个元素找到正确数据结构的痛苦吗?不,只需使用 px
构建 one 图形,然后从那里“窃取”所有图形元素并将其用于 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()