【问题标题】:Python plotly scatter_geo modify hover dataPython plotly scatter_geo 修改悬停数据
【发布时间】:2020-09-07 03:56:57
【问题描述】:

我想修改悬停数据并将其留给例如只有bins 数据。 我做了以下代码,但hover_data 参数不起作用。修改har数据的方法是什么?

import plotly.express as px
import plotly.graph_objs as go
import pandas as pd

rows=[['501-600','15','122.58333','45.36667'],
      ['till 500','4','12.5','27.5'],
      ['more 1001','41','-115.53333','38.08'],
      ]

colmns=['bins','data','longitude','latitude']
df=pd.DataFrame(data=rows, columns=colmns)
df = df.astype({"data": int})

fig=px.scatter_geo(df,lon='longitude', lat='latitude',
                      color='bins',
                      opacity=0.5,
                      size='data',
                      projection="natural earth", hover_data=(['bins']))

fig.add_trace(go.Scattergeo(lon=df["longitude"],
              lat=df["latitude"],
              text=df["data"],
              textposition="middle center",
              mode='text',
              showlegend=False))
fig.show()

【问题讨论】:

    标签: python hover plotly scatter


    【解决方案1】:

    您可以在下面提到 scatter_geo 的 hover_data 参数。

    import plotly.express as px
    import plotly.graph_objs as go
    import pandas as pd
    
    rows=[['501-600','15','122.58333','45.36667'],
          ['till 500','4','12.5','27.5'],
          ['more 1001','41','-115.53333','38.08'],
          ]
    
    colmns=['bins','data','longitude','latitude']
    df=pd.DataFrame(data=rows, columns=colmns)
    df = df.astype({"data": int})
    
    fig=px.scatter_geo(df,lon='longitude', lat='latitude',
                          color='bins',
                          opacity=0.5,
                          size='data',
                          projection="natural earth", hover_data={'longitude':False,'latitude':False,'data':False})
    
    fig.add_trace(go.Scattergeo(lon=df["longitude"],
                  lat=df["latitude"],
                  text=df["data"],
                  textposition="middle center",
                  mode='text',
                  showlegend=False))
    
    
    fig.show()
    

    在 hover_data 中将列名设置为 False 将从 hover_data 中删除该列名。 希望这能回答您的问题。

    【讨论】:

    • 现在在它的输出中:RuntimeError: dictionary changed size during iteration
    • 我运行了你的整个程序,改变了 hover_data。它给出了正确的输出。您是否更改了数据框中的列?
    • 嗨,我用整个程序更新了我的评论,为我提供了预期的输出。
    • 它给了我同样的输出。也许是因为 libs 的版本?
    • 似乎这应该可以工作,但我得到了同样的错误。
    【解决方案2】:

    使用接受的答案,我发现了以下错误(类似于@Asha Ramprasad 的 cmets):

    RuntimeError: dictionary changed size during iteration
    

    还有以下内容:

    Python 3.7.6 (default, Jan  8 2020, 13:42:34) 
    >>> import plotly
    >>> plotly.__version__
    '4.4.1'
    

    我通过传递我想要的数据框列的列表而不是字典来消除错误:

    hover_data = [df["whatever I want displayed"],df["other thing to display"]]
    

    这种阴谋行为对我来说似乎是一个错误。请注意,这不允许删除列,只能添加。

    【讨论】:

      【解决方案3】:

      使用悬停模板:hover template 在这种情况下可能会很好用:

      fig=px.scatter_geo(df,lon='longitude', lat='latitude',
                            #color='bins',
                            opacity=0.5,
                            size='data',
                            projection="natural earth")
      
      fig.update_traces(customdata=df.bins)
      fig.update_traces(hovertemplate='Bins: %{customdata}<extra></extra>')
      

      请参阅herehere,了解在悬停模板中使用customdata

      customdata – 为每个数据分配额外的数据。这在以下情况下可能很有用 监听悬停、点击和选择事件。请注意,“分散” traces 还会在标记 DOM 元素中附加自定义数据项

      更新:在px.scatter_geo 中使用color 选项将对生成的绘图数据进行分组,使customdata 不再与下划线绘图数据对齐。这通常是我放弃 plotly express 并使用 plotly go 的点。

      【讨论】:

      • 谢谢,但是如果我确实像您建议的那样,那么在即我只看到单词bins 本身没有任何数据,我也尝试从您的链接中应用信息,如下所示:fig.update_traces(hovertemplate ='%{bins}') 但在此我得到的案例:%{bins} 你觉得呢?
      • 你是对的,它似乎只是工作(至少对我来说),因为“垃圾箱”数据显示在 &lt;extra&gt; 悬停字段中。添加customdata 似乎有帮助(请参阅上面的更新),但color 选项会破坏它。我会继续研究这个,如果我想出更好的方法,请告诉你。
      • 另外,您可能会发现使用go.Scattergeo 代替px.scatter_geo 更容易使用。
      • 似乎“bins”数据显示在customdata 中。有趣的是什么逻辑?如果我想添加几个数据字段来显示呢?再一次,我需要保存现在存在的乐章和颜色
      • 在上面添加了更多信息,但简而言之,是的,您可以向customdata 添加多个字段。我还在研究颜色部分。
      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2018-09-04
      • 2022-01-07
      • 2018-03-25
      • 2018-08-30
      • 1970-01-01
      相关资源
      最近更新 更多