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

如何从两个CSV提取经纬度并dropna,用Plotly绘制带独立图例的可切换scatter_mapbox

解决方案

第一步:先把数据处理干净

用pandas读取两个CSV文件,只保留lat和long列,再删掉含缺失值的行:

import pandas as pd
import plotly.graph_objects as go

# 处理第一个数据集
df1 = pd.read_csv('你的第一个文件.csv')
df1_clean = df1[['lat', 'long']].dropna()

# 处理第二个数据集
df2 = pd.read_csv('你的第二个文件.csv')
df2_clean = df2[['lat', 'long']].dropna()

第二步:在同一地图上绘制带独立图例的双散点层

别用fig.add_trace(fig2.data[0])这种直接搬移trace的方式,直接在同一个Figure里分别定义两个散点层,手动设置颜色和图例名称,就能实现颜色区分、独立图例,还能点击图例切换单个数据集的显示状态:

# 初始化空地图对象
fig = go.Figure()

# 添加第一个数据集的散点,设置红色、自定义图例名
fig.add_trace(go.Scattermapbox(
    lat=df1_clean['lat'],
    lon=df1_clean['long'],
    mode='markers',
    marker=dict(
        size=8,
        color='#ff0000',  # 支持十六进制/RGB颜色值
        opacity=0.7
    ),
    name='数据集1'
))

# 添加第二个数据集的散点,设置蓝色、自定义图例名
fig.add_trace(go.Scattermapbox(
    lat=df2_clean['lat'],
    lon=df2_clean['long'],
    mode='markers',
    marker=dict(
        size=8,
        color='#0000ff',
        opacity=0.7
    ),
    name='数据集2'
))

# 配置地图样式与布局
fig.update_layout(
    mapbox_style='open-street-map',  # 也可替换为'carto-positron'等其他地图样式
    mapbox_center={'lat': (df1_clean['lat'].mean() + df2_clean['lat'].mean())/2, 
                   'lon': (df1_clean['long'].mean() + df2_clean['long'].mean())/2},
    mapbox_zoom=10,
    showlegend=True,
    legend=dict(
        yanchor="top",
        y=0.99,
        xanchor="left",
        x=0.01
    )
)

fig.show()

为啥之前的方法会出现撞色+图例重复?

你之前直接把fig2.data[0]添加到主图,相当于完全复用了第二个Figure中trace的所有样式(包括颜色、名称),所以两个散点层视觉上完全一致,图例也只会显示一项。

如果习惯用Plotly Express生成单图,也可以这么调整:

import plotly.express as px

# 用px生成第一个图,修改颜色和图例名
fig1 = px.scatter_mapbox(df1_clean, lat='lat', lon='long')
fig1.data[0].marker.color = '#ff0000'
fig1.data[0].name = '数据集1'

# 用px生成第二个图,同样修改颜色和图例名
fig2 = px.scatter_mapbox(df2_clean, lat='lat', lon='long')
fig2.data[0].marker.color = '#0000ff'
fig2.data[0].name = '数据集2'

# 合并两个trace到同一个Figure
fig = go.Figure(data=fig1.data + fig2.data)
fig.update_layout(mapbox_style='open-street-map', showlegend=True)
fig.show()

内容的提问来源于stack exchange,提问作者Akanksha Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:06:00