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

求助Python实现等值线图叠加到地理地图的绘制方法

你当前混用了两套不兼容的绘图框架:Geopandas默认基于Matplotlib渲染底图,等值线代码用的是Plotly渲染,二者无法直接叠加。选择以下任意一种统一技术栈的方案即可实现需求:

方案1:全Matplotlib技术栈(静态出图,代码改动最小)

import matplotlib.pyplot as plt
import geopandas as gpd
import pandas as pd
import numpy as np
from scipy.interpolate import griddata

# 加载亚洲区域底图
world_map = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
asia = world_map[world_map.continent == 'Asia']

# 创建绘图轴
fig, ax = plt.subplots(figsize=(14,10))
# 先绘制亚洲底图
asia.plot(ax=ax, color='white', edgecolor='black')

# 处理温度插值数据
df = pd.read_csv('./temperature_2d.csv')
x = np.array(df.lon)
y = np.array(df.lat)
z = np.array(df.value)
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
X,Y = np.meshgrid(xi,yi)
Z = griddata((x,y),z,(X,Y), method='cubic')

# 在同一轴上叠加温度等值线热力图,alpha设置透明度避免盖住底图边界
contour = ax.contourf(X, Y, Z, cmap='hot', alpha=0.7)
# 可选:叠加等值线轮廓
ax.contour(X, Y, Z, colors='gray', linewidths=0.5)

# 添加颜色条
plt.colorbar(contour, ax=ax, label='温度')
# 限制坐标范围匹配温度数据的经纬度,避免显示多余区域
ax.set_xlim(x.min(), x.max())
ax.set_ylim(y.min(), y.max())

plt.show()

方案2:全Plotly技术栈(交互式出图,支持缩放、hover查看数值)

import plotly.graph_objects as go
import geopandas as gpd
import pandas as pd
import numpy as np
from scipy.interpolate import griddata

# 加载亚洲边界数据,转成plotly支持的geojson格式
world_map = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
asia = world_map[world_map.continent == 'Asia']
asia_geojson = asia.__geo_interface__

# 处理温度插值数据
df = pd.read_csv('./temperature_2d.csv')
x = np.array(df.lon)
y = np.array(df.lat)
z = np.array(df.value)
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
X,Y = np.meshgrid(xi,yi)
Z = griddata((x,y),z,(X,Y), method='cubic')

# 创建画布
fig = go.Figure()

# 先添加亚洲底图图层
fig.add_trace(go.Choropleth(
    geojson=asia_geojson,
    locations=asia.index,
    z=[1]*len(asia), # 统一设置底图颜色为白色
    colorscale=[[0, 'white'], [1, 'white']],
    marker_line_color='black',
    marker_line_width=1,
    showscale=False,
    featureidkey='id'
))

# 叠加温度等值线图层
fig.add_trace(go.Contour(
    z=Z,
    x=xi,
    y=yi,
    colorscale = 'Hot',
    contours_coloring='heatmap',
    opacity=0.7,
    colorbar_title='温度'
))

# 设置地图坐标系,匹配经纬度范围
fig.update_geos(
    projection_type='mercator',
    lonaxis_range=[x.min(), x.max()],
    lataxis_range=[y.min(), y.max()],
    visible=False # 隐藏plotly默认自带的世界底图,只用自定义的亚洲底图
)

fig.update_layout(height=800, width=1100)
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:27:03