将颜色映射到 plotly go.Pie 图表中的标签

我正在使用 make_subplots 和 go.Pie 绘制一系列 3 个饼图。我想最终将它们放在 dash 应用程序中,用户可以在其中过滤数据并且图形将更新。我如何将特定颜色映射到变量,以便男性始终为蓝色,女性始终为粉红色等。您可以使用 color_discrete_map 的 plotly express 来执行此操作,但 plotly express 不支持子图 afaik。


这是我制作性别饼图的示例 df。其他 dfs 具有相同的格式只是不同的值。


    Gender  ACC_ID  percent

0   Female  57647   57.0

1   Male    37715   37.0

2   Other   5875    6.0

这是我用来制作数字的代码


fig = make_subplots(rows=1, cols=3, specs=[[{'type':'domain'}, {'type':'domain'},{'type':'domain'}]])

fig.add_trace(go.Pie(labels=age["Age_Group"], values=age["percent"],customdata=age["ACC_ID"], textinfo='label+percent',insidetextorientation='horizontal', textfont=dict(color='#000000'), marker_colors=px.colors.qualitative.Plotly),

              1, 1)

fig.add_trace(go.Pie(labels=gender["Gender"], values=gender["percent"], customdata=gender["ACC_ID"],textinfo='label+percent',insidetextorientation='horizontal',textfont=dict(color='#000000'),marker_colors=px.colors.qualitative.Plotly),

              1, 2)

fig.add_trace(go.Pie(labels=sample["Sample_Type"], values=sample["percent"], customdata=sample["ACC_ID"],textinfo='label+percent',texttemplate='%{label}<br>%{percent:.1%f}',insidetextorientation='horizontal',textfont=dict(color='#000000'),marker_colors=px.colors.qualitative.Prism),

              1, 3)



fig.update_traces(hole=.4, hoverinfo='label+percent', hovertemplate="<b>%{label}</b><br>Percent: %{percent}<br>Total: %{customdata}<extra></extra>")


fig.update_layout(

    showlegend=False,

    uniformtext_minsize=14, 

    uniformtext_mode='hide',


    annotations=[dict(text='Age', x=0.13, y=0.5, font_size=20, showarrow=False, font=dict(color="black")),

                 dict(text='Gender', x=0.5, y=0.5, font_size=20, showarrow=False,font=dict(color="black")),

                 dict(text='Sample', x=0.879, y=0.5, font_size=20, showarrow=False,font=dict(color="black"))])

    


plot(fig)


互换的青春
浏览 253回答 3
3回答

江户川乱折腾

如果没有 Plotly Express,您可以尝试以下操作:通过添加以下内容来停止 go.Pie() 对数据进行排序:sort=False定义颜色:fig.update_traces(marker=dict(colors=['blue',&nbsp;'red',&nbsp;'green']))虽然它不如 color_discrete_map 干净。

慕的地10843

您实际上可以使用go.Pie()中的参数marker_colors将值(颜色)映射到标签。您只需要创建一个dict关联标签:颜色并像这样使用它:gender_color = {'Female':'pink', 'Male':'blue', 'Other':'yellow'}fig = make_subplots(rows=1, cols=3, specs=[[{'type':'domain'}, {'type':'domain'},{'type':'domain'}]])fig.add_trace(go.Pie(labels=age["Age_Group"], values=age["percent"],customdata=age["ACC_ID"], textinfo='label+percent',insidetextorientation='horizontal', textfont=dict(color='#000000'), marker_colors=px.colors.qualitative.Plotly),1, 1)fig.add_trace(go.Pie(labels=gender["Gender"], values=gender["percent"], customdata=gender["ACC_ID"],textinfo='label+percent',insidetextorientation='horizontal',textfont=dict(color='#000000'),marker_colors=gender["Gender"].map(gender_color)),1, 2)fig.add_trace(go.Pie(labels=sample["Sample_Type"], values=sample["percent"], customdata=sample["ACC_ID"],textinfo='label+percent',texttemplate='%{label}<br>%{percent:.1%f}',insidetextorientation='horizontal',textfont=dict(color='#000000'),marker_colors=px.colors.qualitative.Prism),1, 3)fig.update_traces(hole=.4, hoverinfo='label+percent', hovertemplate="<b>%{label}</b><br>Percent: %{percent}<br>Total: %{customdata}<extra></extra>")fig.update_layout(&nbsp; &nbsp; showlegend=False,&nbsp; &nbsp; uniformtext_minsize=14,&nbsp;&nbsp; &nbsp; uniformtext_mode='hide',&nbsp; &nbsp; annotations=[dict(text='Age', x=0.13, y=0.5, font_size=20, showarrow=False, font=dict(color="black")),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dict(text='Gender', x=0.5, y=0.5, font_size=20, showarrow=False,font=dict(color="black")),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dict(text='Sample', x=0.879, y=0.5, font_size=20, showarrow=False,font=dict(color="black"))])plot(fig)

猛跑小猪

看起来color_discrete_map就是你所追求的。您可以创建一个字典,将所需的标签作为键,将相应的颜色十六进制代码作为值。palette = {"Male": "#0064FF","Female":"#FF8FDF", "Other": "#FFC300"}然后将其作为参数传递到您的 pie() 图表中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python