Plotly sunburst - 为内圈和外圈定义不同的颜色

Sil*_*oud 2 python plotly sunburst-diagram plotly-python

我正在尝试为著名的Kaggle Titanic 挑战做一些数据可视化。我想绘制几个饼图,旭日变体,在内圈中放入一些特定特征(性别,机票类别,...),在外圈上放置该特征幸存/死亡。

这是一个例子:

在此输入图像描述

我想对内圈和外圈使用不同的颜色。例如,蓝色/粉色代表男性/女性,绿色/灰色代表幸存者/死亡者。我做不到,如果我按性别区分,我就无法按生存区分,反之亦然。

这是我的代码:

color_discrete_sequence = ['#8B25BE', '#2D9157', '#2D5F91', '#97909A']

fig = px.sunburst(
    total_raw_df,
    path=['sex', 'survived'],
    # names='sex',
    labels=[{'0': 'Deceased', '1': 'Survived'}],
    color=total_raw_df['sex'],
    color_discrete_sequence=color_discrete_sequence
)
fig.update_traces(
    textinfo="label+percent parent",
    insidetextorientation='horizontal'
)
fig.update_layout(
        font=dict(size=18)
    )
fig.show()
Run Code Online (Sandbox Code Playgroud)

该数据集是经典的泰坦尼克号数据集,仅供参考,这些是数据框列:

Index(['pclass', 'survived', 'name', 'sex', 'age', 'sibsp', 'parch', 'ticket',
   'fare', 'cabin', 'embarked', 'boat', 'body', 'home.dest'],
  dtype='object')
Run Code Online (Sandbox Code Playgroud)

r-b*_*ers 5

由于我们无法准备与问题相同的数据,因此我们转用seaborn数据集来解决该问题。颜色对应关系令人困惑,但可以通过更新与标签一对一关系的颜色来实现。fig.data您可以使用查看图形结构来检查标签。

import seaborn as sns
df = sns.load_dataset('titanic')

import plotly.express as px

color_discrete_sequence = ['#8B25BE', '#2D9157', '#2D5F91', '#97909A']

fig = px.sunburst(
    df,
    path=['sex', 'survived'],
    # names='sex',
    labels=[{'0': 'Deceased', '1': 'Survived'}],
    color=df['sex'],
    color_discrete_sequence=color_discrete_sequence
)
fig.update_traces(
    textinfo="label+percent parent",
    insidetextorientation='horizontal'
)
fig.update_layout(
        font=dict(size=18)
    )

color_mapping = {'0': "#708090", '1': "#006400", 'female': "#c71585", 'male': "#0000cd"}
fig.update_traces(marker_colors=[color_mapping[cat] for cat in fig.data[-1].labels])

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

在此输入图像描述