为了账号安全,请及时绑定邮箱和手机立即绑定

Plotly 中的 Python_DF 排序和自定义数据

Plotly 中的 Python_DF 排序和自定义数据

慕标5832272 2022-12-20 15:18:11
我在下面的代码中悬停时遇到错误的反射数据问题。请参阅每个块的注释代码。我在下面的代码中悬停时遇到错误的反射数据问题。请参阅每个块的注释代码。import plotly.express as pximport pandas as pdimport plotly.graph_objects as gorows=[['501-600','15','122.58333','45.36667','Name1'],      ['till 500','4','12.5','27.5','Name2'],      ['more 601','41','-115.53333','38.08','Name3'],      ['till 500', '26', '65.5', '29.5','Name4'],      ['501-600','35','12.58333','55.36667','Name5'],      ['more 601','9','55.53333','-38.08','Name6'],      ]colmns=['bins','data','longitude','latitude','names']#Df creationdf=pd.DataFrame(data=rows, columns=colmns)#Ordering for labels in legendorder = ['till 500', '501-600', 'more 601']df = df.set_index('bins')df_ordered = df.T[order].T.reset_index()df_ordered = df_ordered.astype({"data": int})#Plotting vizfig=px.scatter_geo(df_ordered,lon='longitude', lat='latitude',color='bins',                   color_discrete_sequence=px.colors.qualitative.Set1,                   hover_name="names",                   size='data',opacity=0.7,text='data',                   projection="equirectangular",size_max=35,                   )#Adding custom data for hoversfig.update_traces(customdata=df_ordered)fig.update_traces(hovertemplate="<b>Name: %{customdata[4]} </b><br><br>Bin: %{customdata[0]}<br>"                                "Data: %{customdata[1]:.2f}<extra></extra>")#Adding marker labelsfig.add_trace(go.Scattergeo(lon=df_ordered["longitude"],              lat=df_ordered["latitude"],              text=df_ordered["names"],              textposition="middle left",              mode='text',              textfont=dict(size=12,color="black"),              showlegend=False,              texttemplate="       %{text}",              hoverinfo='skip',              ))fig.show()所以最后我猜想这个问题是由订购引起的,也许我需要在自定义数据行中重新制作 smth,但无法理解如何解决它。将感谢您帮助修复它。
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

在这种情况下,我很难使用自定义悬停模板(你最终可以看到这个文档)但我认为我可以在不添加额外跟踪的情况下实现你正在寻找的输出。


fig=px.scatter_geo(df_ordered,

                   lon='longitude',

                   lat='latitude',

                   color='bins',

                   color_discrete_sequence=px.colors.qualitative.Set1,

                   hover_name="names",

                   size='data',

                   opacity=0.7,

                   text='names',

                   projection="equirectangular",

                   size_max=35,

                   # by default every column go to hover

                   # you can eventually use formatting here

                   hover_data={"longitude": False,

                               "latitude": False,

                               "names": False,

                               "data": ":.2f"},

                   # if you don't want to change column names

                   # you can just change them here

                   labels={"bins": "Bin",

                           "data": "Data"}

                   )


fig.update_traces(mode="markers+text",

                  textposition="middle left",

                  textfont=dict(size=12,

                                color="black")

                  showlegend=False,

                 )


# Here I just change the `=` for `: ` in every trace

for data in fig.data:

    data.hovertemplate = data.hovertemplate.replace("=", ": ")


fig.show()

更新我刚刚意识到有一个错误与labels一起使用hover_data,特别是如果您labels出于某种原因使用格式“数据”:“:.2f”未保留。可能的解决方法如下


fig = px.scatter_geo(df_ordered,

                     lon='longitude',

                     lat='latitude',

                     color='bins',

                     color_discrete_sequence=px.colors.qualitative.Set1,

                     hover_name="names",

                     size='data',

                     opacity=0.7,

                     text='names',

                     projection="equirectangular",

                     size_max=35,

                     # by default every column go to hover

                     # you can eventually use formatting here

                     hover_data={"longitude": False,

                                 "latitude": False,

                                 "names": False,

                                 "data": ":.2f"}

                    )


fig.update_traces(mode="markers+text",

                  textposition="middle left",

                  textfont=dict(size=12,

                                color="black"),

                  showlegend=False,

                 )


# it's pretty verbose but now the output should be

# exactly as you expect

for data in fig.data:

    template = data.hovertemplate

    template = template.replace("<b>", "<b>Name: ")\

                       .replace("bins=", "Bin: ")\

                       .replace("data=", "Data: ")

    data.hovertemplate = template


fig.show()


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信