如何基于经纬度及数值点数据绘制Contour plots?
如何基于零散经纬度点绘制等高线图(Contour Plots)
等高线图本身依赖规则网格数据,但你手里只有零散的经纬度和数值点的话,不用手动补全meshgrid的空值,直接通过插值生成网格数据就行,下面是Python环境下的实操步骤:
核心思路
用插值工具把零散点映射到覆盖数据范围的规则网格上,再用常规方法画等高线。
具体步骤
1. 导入依赖库
import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import griddata
2. 准备你的数据
把你手里的三个列表(经度、纬度、数值)直接用就行,这里用示例数据替代:
# 替换成你的真实数据 lon = [110.1, 110.3, 110.5, 110.2, 110.4] lat = [30.2, 30.4, 30.1, 30.3, 30.5] value = [10, 20, 15, 25, 30]
3. 生成目标网格
直接生成覆盖所有数据点范围的规则网格,分辨率自己调(下面是100x100的网格):
grid_lon, grid_lat = np.meshgrid( np.linspace(min(lon), max(lon), 100), np.linspace(min(lat), max(lat), 100) )
4. 插值填充网格
用griddata函数完成插值,三种常用方法按需选:
# 线性插值:平衡速度和平滑度,最常用 grid_value = griddata((lon, lat), value, (grid_lon, grid_lat), method='linear') # 最近邻插值:最快,适合缺失值多的场景,结果偏块状 # grid_value = griddata((lon, lat), value, (grid_lon, grid_lat), method='nearest') # 立方插值:最平滑,计算稍慢,适合数据点较多的情况 # grid_value = griddata((lon, lat), value, (grid_lon, grid_lat), method='cubic')
5. 绘制等高线图
plt.figure(figsize=(8,6)) # 绘制填充式等高线 contour_fill = plt.contourf(grid_lon, grid_lat, grid_value, cmap='viridis') # 叠加等高线线条(白色更显眼) contour_lines = plt.contour(grid_lon, grid_lat, grid_value, colors='white') # 给等高线加数值标签 plt.clabel(contour_lines, inline=True, fontsize=10) # 添加颜色条并标注含义 plt.colorbar(contour_fill, label='数值') # 设置坐标轴和标题 plt.xlabel('经度') plt.ylabel('纬度') plt.title('基于零散点的等高线图') plt.show()
额外提示
- 网格分辨率(
linspace的第三个参数)越高,图越精细,但计算量也越大,根据你的数据量调整 - 如果数据里有离群点,插值前建议先清洗,避免影响整体插值效果
- 不同插值方法的结果差异明显,可以多试几种看哪个符合你的需求
内容的提问来源于stack exchange,提问作者TSobhy
相关产品推荐
相关产品推荐

