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

如何在R中绘制带插值等高线的距离-深度温度剖面

在R中实现带插值等高线的温度剖面(仿MATLAB效果)

要消除ggplot2绘制的方块感并添加等高线,核心是先对稀疏的距离-深度-温度数据做二维插值,再用ggplot2可视化插值后的密集网格。以下是具体实现步骤:

1. 准备模拟数据(替换为你的真实数据)

先生成一组和你随机数据集结构一致的模拟数据:

set.seed(123)
distance <- runif(100, 0, 100)
depth <- runif(100, 0, 50)
temperature <- 10 - depth/2 + rnorm(100, 0, 1) + distance/10
df <- data.frame(distance, depth, temperature)

2. 用akima包做二维插值

akima是R中常用的二维插值工具包,能把稀疏点转换成密集网格,彻底消除方块感:

# 安装并加载依赖包
install.packages("akima")
library(akima)
library(ggplot2)
library(tidyr)

# 执行插值,生成200x200的密集网格
interp_result <- interp(
  x = df$distance, 
  y = df$depth, 
  z = df$temperature,
  xo = seq(min(df$distance), max(df$distance), length = 200),
  yo = seq(min(df$depth), max(df$depth), length = 200),
  linear = TRUE  # 线性插值,也可尝试spline做平滑插值
)

# 转换为ggplot兼容的数据框格式
interp_df <- as.data.frame(interp_result)
interp_df <- pivot_longer(interp_df, cols = -x, names_to = "y", values_to = "temperature")
interp_df$y <- as.numeric(gsub("y", "", interp_df$y))

3. 用ggplot2绘制插值剖面+等高线

插值后的数据可以直接用geom_raster(配合interpolate=TRUE)实现平滑填充,再叠加等高线和标签:

ggplot(interp_df, aes(x = x, y = y)) +
  # 平滑填充温度场,消除方块感
  geom_raster(aes(fill = temperature), interpolate = TRUE) +
  # 添加白色等高线
  geom_contour(aes(z = temperature), color = "white", size = 0.5) +
  # 给等高线添加数值标签
  geom_contour_label(aes(z = temperature), color = "black", size = 3) +
  # 反转Y轴(深度通常向下数值增大,符合常规展示习惯)
  scale_y_reverse(name = "深度") +
  scale_x_continuous(name = "距离") +
  # 设置温度颜色渐变(可根据需求调整配色)
  scale_fill_gradientn(colors = c("blue", "cyan", "yellow", "red"), name = "温度") +
  theme_bw()

备选:用mgcv做平滑曲面拟合

如果需要更平滑的曲面(而非单纯插值),可以用mgcv包的广义可加模型(GAM)拟合温度场:

install.packages("mgcv")
library(mgcv)

# 拟合平滑曲面模型
gam_fit <- gam(temperature ~ s(distance, depth, k = 50), data = df)

# 生成预测网格
pred_grid <- expand.grid(
  distance = seq(min(df$distance), max(df$distance), length = 200),
  depth = seq(min(df$depth), max(df$depth), length = 200)
)
pred_grid$temperature <- predict(gam_fit, newdata = pred_grid)

# 绘图(和之前逻辑一致)
ggplot(pred_grid, aes(x = distance, y = depth)) +
  geom_raster(aes(fill = temperature), interpolate = TRUE) +
  geom_contour(aes(z = temperature), color = "white") +
  scale_y_reverse() +
  scale_fill_gradientn(colors = c("blue", "cyan", "yellow", "red")) +
  theme_bw()

工具包说明

  • 专用插值工具包:akima、interp都是专门处理二维插值的工具,适合从稀疏点生成密集网格。
  • 平滑拟合工具:mgcv适合对数据做平滑建模,生成更自然的曲面。
  • 可视化完全依赖ggplot2即可,无需额外专用可视化包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:03:26