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
你觉得呢?
你是对的,它似乎只是工作(至少对我来说),因为“垃圾箱”数据显示在 <extra>
悬停字段中。添加customdata
似乎有帮助(请参阅上面的更新),但color
选项会破坏它。我会继续研究这个,如果我想出更好的方法,请告诉你。
另外,您可能会发现使用go.Scattergeo
代替px.scatter_geo
更容易使用。
似乎“bins”数据显示在customdata
中。有趣的是什么逻辑?如果我想添加几个数据字段来显示呢?再一次,我需要保存现在存在的乐章和颜色
在上面添加了更多信息,但简而言之,是的,您可以向customdata
添加多个字段。我还在研究颜色部分。以上是关于Python plotly scatter_geo 修改悬停数据的主要内容,如果未能解决你的问题,请参考以下文章