Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Plotly:如何在不更改数据源的情况下更改围棋饼图的图例?_Python_Plotly_Pie Chart - Fatal编程技术网

Python Plotly:如何在不更改数据源的情况下更改围棋饼图的图例?

Python Plotly:如何在不更改数据源的情况下更改围棋饼图的图例?,python,plotly,pie-chart,Python,Plotly,Pie Chart,我正在练习使用Python在Plotly Express中构建饼图 这是我做的饼图 此图表是从一个名为 gender值为[0,1,2] count\u genders值为[总计数0,总计数1,总计数2] 我计划对这些值添加一些描述;例如 0-女性 1-男性 2-未定义 这就是我目前所处的困境 如果我没记错,如果您想更改图例中的标签(至少在Choropleth地图中),您可以操纵色标栏中的刻度。通过操纵它们,可以重命名有关数据的标签。因此,我想知道你们是否可以在饼图中做同样的事情 此图表的当

我正在练习使用Python在Plotly Express中构建饼图
这是我做的饼图

此图表是从一个名为

  • gender
    值为
    [0,1,2]

  • count\u genders
    值为
    [总计数0,总计数1,总计数2]

  • 我计划对这些值添加一些描述;例如

    • 0-女性

    • 1-男性

    • 2-未定义

    这就是我目前所处的困境
    如果我没记错,如果您想更改图例中的标签(至少在Choropleth地图中),您可以操纵
    色标
    栏中的
    刻度
    。通过操纵它们,可以重命名有关数据的标签。因此,我想知道你们是否可以在饼图中做同样的事情

    此图表的当前代码:

    import pandas as pd
    import plotly.express as px
                
    '''
    Pandas DataFrame:
    '''
    users_genders = pd.DataFrame({'gender': {0: 0, 1: 1, 2: 2},
                   'count_genders': {0: 802420, 1: 246049, 2: 106}})
    
    ''' Pie Chart Viz '''
    gender_distribution = px.pie(users_genders,
                                 values='count_genders',
                                 names='gender',
                                 color_discrete_map={'0': 'blue',
                                                     '1': 'red',
                                                     '2': 'green'},
                                 title='Gender Distribution <br>'
                                       'between 2006-02-16 to 2014-02-20',
                                 hole=0.35)
    gender_distribution.update_traces(textposition='outside',
                                      textinfo='percent+label',
                                      marker=dict(line=dict(color='#000000',
                                                            width=4)),
                                      pull=[0.05, 0, 0.03],
                                      opacity=0.9,
                                      # rotation=180
                                      )
    gender_distribution.update_layout(legend=dict({'traceorder': 'normal'}
                                                  # ticks='inside',
                                                  # tickvals=[0, 1, 2],
                                                  # ticktext=["0 - Female",
                                                  #           "1 - Male",
                                                  #           "2 - Undefined"],
                                                  # dtick=3
                                                  ),
                                       legend_title_text='User Genders')
    gender_distribution.show()
    
    将熊猫作为pd导入
    将plotly.express导入为px
    '''
    数据帧:
    '''
    users\u genders=pd.DataFrame({'gender':{0:0,1:1,2:2},
    ‘性别统计’:{0:802420,1:246049,2:106})
    “饼图即”
    性别分布=px.pie(用户性别,
    values='count\u genders',
    姓名和性别,
    颜色离散映射={0':'blue',
    “1”:“红色”,
    “2”:“绿色”},
    title='性别分布
    ' “在2006年2月16日至2014年2月20日期间”, 孔=0.35) 性别分布。更新跟踪(textposition='outside', textinfo='百分比+标签', marker=dict(line=dict(color='#000000', 宽度=4), 拉力=[0.05,0,0.03], 不透明度=0.9, #旋转=180 ) 性别分布。更新布局(图例=dict({'traceorder':'normal'} #"内",, #滴答声=[0,1,2], #ticktext=[“0-女性”, #“1-男性”, #“2-未定义”], #dtick=3 ), 图例\u title\u text='User Genders') 性别分布。show()
    我试图在
    update\u布局中添加
    ticks
    ,但没有成功。它返回有关错误参数的错误消息。有人能帮我解决这个问题吗

    编辑1:如果我不清楚,我想知道是否可以修改图例中显示的值而不更改文件中的原始值。非常感谢您抽出时间来帮助我解决这个问题


    编辑2:添加导入和其他先前代码的详细信息,删除Dropbox链接。

    如果我正确理解您的问题,您希望更改图例中显示的内容,而不更改数据源中的名称。也许有更优雅的方法可以做到这一点,但我已经为您准备了一个自定义函数
    newLegend(图,newNames)

    这样的数字:

    fig = newLegend(fig = fig, newNames = {'Australia':'Australia = Dangerous',
                                           'New Zealand' : 'New Zealand = Peaceful'})
    

    …运行:

    fig = newLegend(fig = fig, newNames = {'Australia':'Australia = Dangerous',
                                           'New Zealand' : 'New Zealand = Peaceful'})
    
    …将给您:

    fig = newLegend(fig = fig, newNames = {'Australia':'Australia = Dangerous',
                                           'New Zealand' : 'New Zealand = Peaceful'})
    

    我希望这就是你想要的。如果没有,请毫不犹豫地告诉我

    完整代码: 编辑1:来自OP的数据样本示例 你的数据面临的挑战是
    性别
    属于
    整数
    类型,而不是
    字符串
    。因此,自定义函数试图用另一种类型的元素替换一种类型的元素。我通过一次性替换包含标签的整个数组,而不是逐个元素对其进行操作,解决了这个问题

    绘图:

    完整代码:
    将熊猫作为pd导入
    将plotly.express导入为px
    将numpy作为np导入
    #用于更改标签的自定义函数
    def新图例(图,新名称):
    新标签=[]
    对于新名称中的项目:
    对于i,枚举中的元素(图数据[0]。标签):
    如果elem==项目:
    #图数据[0]。标签[i]=新名称[项目]
    newLabels.append(新名称[项目])
    图数据[0]。标签=np.array(新标签)
    返回(图)
    '''
    数据帧:
    '''
    users\u genders=pd.DataFrame({'0':{0:1,1:2},
    '802420': {0: 246049, 1: 106}})
    users\u genders=pd.DataFrame({'gender':[0,1,2],
    “性别计数”:[802420、246049、106]})
    “饼图即”
    性别分布=px.pie(用户性别,
    values='count\u genders',
    姓名和性别,
    颜色离散映射={0':'blue',
    “1”:“红色”,
    “2”:“绿色”},
    title='性别分布
    ' “在2006年2月16日至2014年2月20日期间”, 孔=0.35) 性别分布。更新跟踪(textposition='outside', textinfo='百分比+标签', marker=dict(line=dict(color='#000000', 宽度=4), 拉力=[0.05,0,0.03],