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

如何在Python中为海底地形散点图添加指定值的多条等高线

问题:给海底地形散点图添加指定等高线

我有一个包含latitude(纬度)、longitude(经度)、elevation(海拔)三列的DataFrame,想要绘制海底地形图。目前已经用以下代码生成了散点图:

Df2D = pd.read_csv(r'C:\Users\Thomas\Desktop\Df.csv', header = 0, delimiter=';')

Y = Df2D['lat'].values
X = Df2D['lon'].values
Z = Df2D['elevation'].values

plt.scatter(X,Y, c=Z)
plt.colorbar()
plt.show()

现在我想给图添加0m、-10m、-50m等指定值的多条等高线,但使用plt.tricontour只得到单一等高线,效果不好:

plt.tricontour(X, Y, Z, 0, linewidths=0.5, colors='k')
plt.tricontourf(X, Y, Z, 0)

请问怎么优化结果?


解决方案

1. 核心修改:传入等高线值列表

你当前代码只生成单一条等高线,是因为plt.tricontour的第四个参数传入了单个数值0,要生成多条指定等高线,只需将目标值做成列表传入:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
Df2D = pd.read_csv(r'C:\Users\Thomas\Desktop\Df.csv', header=0, delimiter=';')
X = Df2D['lon'].values
Y = Df2D['lat'].values
Z = Df2D['elevation'].values

# 绘制散点底图,可选海底友好配色
plt.scatter(X, Y, c=Z, cmap='Blues_r')
plt.colorbar(label='海拔(m)')

# 指定需要的等高线值
target_levels = [0, -10, -50]
# 绘制等高线线条,用对比色增强辨识度
plt.tricontour(X, Y, Z, levels=target_levels, linewidths=1, colors='white', linestyles='--')
# 添加等高线标签,提升可读性
plt.clabel(plt.tricontour(X, Y, Z, levels=target_levels), inline=True, fontsize=8)

plt.xlabel('经度')
plt.ylabel('纬度')
plt.title('海底地形图(含指定等高线)')
plt.show()

2. 进阶优化:插值到规则网格(解决数据分布不均问题)

如果原始数据点分布稀疏或不均匀,tricontour生成的等高线可能出现断裂。可以用scipy的插值方法将数据转换为规则网格,再用plt.contour绘制更平滑的等高线:

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

# 读取数据
Df2D = pd.read_csv(r'C:\Users\Thomas\Desktop\Df.csv', header=0, delimiter=';')
X = Df2D['lon'].values
Y = Df2D['lat'].values
Z = Df2D['elevation'].values

# 创建规则网格
xi = np.linspace(X.min(), X.max(), 1000)
yi = np.linspace(Y.min(), Y.max(), 1000)
xi, yi = np.meshgrid(xi, yi)

# 用三次插值将Z值映射到网格
zi = griddata((X, Y), Z, (xi, yi), method='cubic')

# 绘制散点底图+平滑等高线
plt.scatter(X, Y, c=Z, cmap='Blues_r', s=8)
plt.contour(xi, yi, zi, levels=[0, -10, -50], linewidths=1, colors='white', linestyles='--')
plt.clabel(plt.contour(xi, yi, zi, levels=[0, -10, -50]), inline=True, fontsize=8)
plt.colorbar(label='海拔(m)')

plt.xlabel('经度')
plt.ylabel('纬度')
plt.show()

3. 细节调整建议

  • 配色:Blues_r是反转蓝色系,深色调对应低海拔(深海),比默认配色更贴合海底地形展示;
  • 等高线样式:用白色虚线在深色底图上更醒目,可根据需求调整linewidths和linestyles;
  • 标签:clabel函数可以给等高线添加数值标签,让图的信息更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:45:19