使用Plotly Express制作饼图时如何排序标签?

3
让我们来看一下这个示例数据框:
df = pd.DataFrame({"Day":['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
'Proportion':[0.24495486, 0.17300189, 0.23019185, 0.15408692, 0.17827757,0.01100911, 0.0084778]})

         Day  Proportion
0     Monday    0.244955
1    Tuesday    0.173002
2  Wednesday    0.230192
3   Thursday    0.154087
4     Friday    0.178278
5   Saturday    0.011009
6     Sunday    0.008478

我想使用Plotly Express通过饼图来可视化这个数据框。我已经编写了以下函数:
import plotly.express as px

def plot_pie_graph(df_graph,col_names,col_values, title_x = "axis_x",title_y="axis_y",title = "Graphe",
                   color_discrete_map = {}, save_graph_name = "") :
    
    if title_x == "axis_x" :
        title_x = col_names
    if title_y == "axis_y":
        title_y = col_values
    
    fig = px.pie(df_graph, values = col_values, names = col_names,color_discrete_map=color_discrete_map,
                 color=col_names)

    fig.update_layout({
            'plot_bgcolor': 'rgba(0,0,0,0)',
            'paper_bgcolor': 'rgba(0,0,0,0)',
        },
        hoverlabel=dict(
            #bgcolor="white", 
            font_size=12, 
            #font_family="Rockwell"
        ),
        xaxis={
            'title': title_x,
            },
        yaxis={'title':title_y},
        title={
            'text': title,
            #'y':0.95,
            'x':0.5,
            'xanchor': 'center',
            'yanchor': 'top'},
        hovermode = "x"
    )
    
    if save_graph_name != "" :
        fig.write_html(save_graph_name + ".html")
    
    fig.show()

当我使用它时,我得到了以下的饼图:
plot_pie_graph(df,"Day",'Proportion',title = "Proportion by day")

enter image description here

天数的顺序与数据框不同。我看到柱状图中有一个名为“category_order”的参数(有关条形图)可以解决这个问题,但是在饼图中不可用。请问该如何在标签中逻辑排序天数?
2个回答

7

只需要添加

fig.update_traces(sort=False) 

在创建图形之后,在保存/展示图形之前。

0

感谢 @Pascalco 的回答!如果您使用go(plotly.graph_objects),您可以使用以下代码:

go.Pie(labels=x, values=y, sort=False)

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