Python plotly scatter_geo 修改悬停数据

Posted

技术标签:

【中文标题】Python plotly scatter_geo 修改悬停数据【英文标题】:Python plotly scatter_geo modify hover data 【发布时间】: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()

【问题讨论】:

【参考方案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>')

请参阅here 和here,了解在悬停模板中使用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 添加多个字段。我还在研究颜色部分。

以上是关于Python plotly scatter_geo 修改悬停数据的主要内容,如果未能解决你的问题,请参考以下文章

python plot图怎么调整属性

python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot)

plot bar chart using python

Python的 plot函数和绘图参数设置

Python将瀑布图转换为plotly

Python使用plotly绘制数据图表的方法