You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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()

为什么之前的方法失效?

  1. px.scatter的color参数默认会排除分类列含NaN的行,替换为明确类别即可解决。
  2. 直接用go.Scatter添加全量数据时,没有按Location拆分轨迹,导致无法区分颜色;且错误使用fillcolor(该参数用于填充区域,不是标记颜色)。

内容的提问来源于stack exchange,提问作者Sam Dean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:10:15