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

空间模型预测绘图故障排查(疑似维度不匹配问题)

空间预测绘图维度不匹配问题求助

我已经完成空间模型搭建与预测,但预测结果的绘图代码无法正常运行,疑似存在维度不匹配问题。以下是相关代码与数据处理步骤,请求协助修改代码解决该问题:

预处理代码

# 转换数据为长格式并合并两个数据框
MaxTemp %>%
  pivot_longer(.,Machrihanish:Lyneham, names_to = "Location") %>%
  full_join(.,metadata) -> MaxTemp_df

# 将value列重命名为温度
MaxTemp_df = MaxTemp_df %>%
  rename(Temp = 'value')

# 筛选夏季月份数据
summer_df = MaxTemp_df %>% 
  filter(Date >= 20200701 & Date <=20200731)

# 转换为地理数据格式
geo_summer_df = as.geodata(summer_df, coords.col = 4:5, data.col = 3) 
geo_summer_df2 = jitterDupCoords(geo_summer_df, max = 0.1, min = 0.05)

建模与预测代码

# 变异函数计算
summer_vario = variog(geo_summer_df2, option = 'bin', estimator.type='modulus', bin.cloud = TRUE)
# 拟合参数化模型
defult_summer_mod = variofit(summer_vario)

# 创建预测点网格
preds_grid = matrix(c(-5.697, 55.441, -0.807, 51.682, -5.328, 50.218, -2.451, 54.684, -4.121, 50.355, -1.586, 54.768, -0.131, 51.505, -4.158, 52.915, 
                  -0.442, 53.875, -3.413, 56.214, -2.860,   54.076, -3.323, 57.711, 0.566,  52.651, -0.626, 54.481, -1.185, 60.139, -2.643, 51.006,
                  -1.491,   53.381, -1.536, 52.424, -6.319, 58.213, -1.992, 51.503), nrow = 20, byrow = TRUE)
summer_preds = krige.conv(geo_summer_df2, locations = preds_grid, krige = krige.control(obj.model = defult_summer_mod))

# 预测结果绘图
# 均值图
image(summer_preds, col = viridis::viridis(100), zlim = c(100, max(c(summer_preds$predict))), 
  coords.data = geo_summer_df2[1]$coords, main = 'Mean', xlab = 'x', ylab = 'y',
  x.leg = c(700, 900), y.leg = c(20, 70))
# 方差图
image(summer_preds, values = summer_preds$krige.var, col = heat.colors(100)[100:1],
  zlim = c(0,max(c(summer_preds$krige.var))), coords.data = geo_summer_df2[1]$coords,
  main = 'Variance', xlab = 'x', ylab = 'y', x.leg = c(700, 900), y.leg = c(20, 70))

问题分析与解决方案

问题核心在于image()函数的使用场景:该函数要求输入的预测结果是规则网格格式,但你当前的preds_grid是20个离散点,并非规则网格,导致维度不匹配报错。以下是两种可行修改方案:

方案1:生成规则网格并重新预测

先基于原始数据的坐标范围生成规则网格,再执行预测与绘图:

# 基于原始数据坐标范围生成规则网格
x_range = range(geo_summer_df2$coords[,1])
y_range = range(geo_summer_df2$coords[,2])
preds_grid = expand.grid(x = seq(x_range[1], x_range[2], length.out = 50),
                         y = seq(y_range[1], y_range[2], length.out = 50))
# 转换为矩阵格式
preds_grid_mat = as.matrix(preds_grid)

# 重新执行克里金预测
summer_preds = krige.conv(geo_summer_df2, locations = preds_grid_mat, krige = krige.control(obj.model = defult_summer_mod))

# 绘制均值图
image(summer_preds, col = viridis::viridis(100), zlim = range(summer_preds$predict), 
      coords.data = geo_summer_df2$coords, main = '夏季温度预测均值', 
      xlab = '经度', ylab = '纬度')
# 添加原始观测点
points(geo_summer_df2$coords, pch = 16, cex = 0.5)

# 绘制方差图
image(summer_preds, values = summer_preds$krige.var, col = heat.colors(100)[100:1],
      zlim = range(summer_preds$krige.var), coords.data = geo_summer_df2$coords,
      main = '夏季温度预测方差', xlab = '经度', ylab = '纬度')
points(geo_summer_df2$coords, pch = 16, cex = 0.5)

方案2:针对离散点绘制散点图(保留原预测点)

如果想保留原有的20个离散预测点,可使用散点图结合颜色映射展示结果:

# 将预测结果与坐标合并
pred_results = data.frame(
  lon = preds_grid[,1],
  lat = preds_grid[,2],
  pred_temp = summer_preds$predict,
  pred_var = summer_preds$krige.var
)

# 绘制均值散点图
library(ggplot2)
ggplot(pred_results, aes(x = lon, y = lat, color = pred_temp)) +
  geom_point(size = 4) +
  scale_color_viridis_c(limits = range(pred_results$pred_temp)) +
  geom_point(data = as.data.frame(geo_summer_df2$coords), aes(x = V1, y = V2), color = "black", size = 1) +
  labs(title = '夏季温度预测均值', x = '经度', y = '纬度', color = '温度') +
  theme_bw()

# 绘制方差散点图
ggplot(pred_results, aes(x = lon, y = lat, color = pred_var)) +
  geom_point(size = 4) +
  scale_color_gradientn(colors = rev(heat.colors(100)), limits = range(pred_results$pred_var)) +
  geom_point(data = as.data.frame(geo_summer_df2$coords), aes(x = V1, y = V2), color = "black", size = 1) +
  labs(title = '夏季温度预测方差', x = '经度', y = '纬度', color = '方差') +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:36:24