如何用Plotly px.Scatter/go.Scatter制作含特定点样式的站点地图
解决Plotly XY散点图展示所有位置(含NaN点)的问题
核心问题是px.scatter使用color='Location'时,会自动过滤掉Location为NaN的行。解决思路是先将NaN替换为明确的类别(比如'Unknown'),再通过分类着色或分轨迹绘制实现需求。
方法一:用Plotly Express快速实现
先处理数据,把NaN替换为可识别的类别,再直接用px.scatter着色:
import plotly.express as px import pandas as pd # 替换Location列的NaN为"Unknown" tagLocData['Location'] = tagLocData['Location'].fillna('Unknown') # 绘制散点图,按Location区分颜色,hover显示Tag信息 fig = px.scatter( tagLocData, x='x_coord', # 对应数据框实际列名 y='y_coord', color='Location', hover_data=['Tag'] ) fig.show()
方法二:用Plotly Graph Objects自定义轨迹(更灵活)
如果需要更精细控制每个类别的样式,可分轨迹添加每个Location的点:
import plotly.graph_objects as go import pandas as pd # 处理NaN值 tagLocData['Location'] = tagLocData['Location'].fillna('Unknown') # 自定义颜色映射 location_color_map = { 'Unit1': '#1f77b4', 'Unit2': '#2ca02c', 'Unknown': '#7f7f7f' } fig = go.Figure() # 遍历每个Location,添加对应轨迹 for loc in tagLocData['Location'].unique(): # 筛选当前Location的子集 subset = tagLocData[tagLocData['Location'] == loc] fig.add_trace(go.Scatter( x=subset['x_coord'], y=subset['y_coord'], mode='markers', name=loc, # 图例名称 marker=dict(color=location_color_map[loc], size=10), # 自定义标记样式 hovertext=subset['Tag'] # 鼠标悬浮显示Tag )) # 调整布局 fig.update_layout( title='站点地图', xaxis_title='X坐标', yaxis_title='Y坐标', legend_title='位置' ) fig.show()
为什么之前的方法失效?
px.scatter的color参数默认会排除分类列含NaN的行,替换为明确类别即可解决。- 直接用
go.Scatter添加全量数据时,没有按Location拆分轨迹,导致无法区分颜色;且错误使用fillcolor(该参数用于填充区域,不是标记颜色)。
内容的提问来源于stack exchange,提问作者Sam Dean
相关产品推荐
相关产品推荐

