Python Plotly:如何在不更改数据源的情况下更改围棋饼图的图例?
我正在练习使用Python在Plotly Express中构建饼图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地图中),您可以操纵色标栏中的刻度。通过操纵它们,可以重命名有关数据的标签。因此,我想知道你们是否可以在饼图中做同样的事情 此图表的当
这是我做的饼图
此图表是从一个名为
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],