Plotly: Как создать сюжет Sunburst, используя graph_objects? - PullRequest
1 голос
/ 16 апреля 2020

мой фрейм данных выглядит примерно так:

    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"])

дает мне правильный график солнечных лучей, где пол находится в средней части диаграммы p ie и для каждого Пол это ассоциируется с возрастами.

Я хочу сделать это, используя graph_objects вместо сюжета express, так как я хочу, чтобы два графика солнечных лучей были рядом.

от df У меня есть выше, как можно Я использую это в graph_objects. Я не понимаю, какие значения добавить к меткам, родителям, идентификаторам и т. Д. c ...

fig = go.Figure()

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

fig.show()

Я читаю документацию, однако не могу понять, как она работает. Если кто-то знает, пожалуйста, скажите мне, как я могу создать график солнечных лучей, используя graph_object с df, который у меня есть выше.

1 Ответ

1 голос
/ 16 апреля 2020

Если 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']. И что теперь? Go через мучительную боль от нахождения правильной структуры данных для каждого элемента? Нет, просто создайте одну фигуру, используя 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:

enter image description here

Теперь, если Вы хотите, чтобы на этом же рисунке отображались некоторые дополнительные функции вашего набора данных, просто добавьте ids=fig['data'][0]['ids'].tolist() к смеси:

Сюжет 3:

enter image description here

Полный код:

# 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...