R语言中栅格图层上绘制坐标点失败问题排查
我在R语言中尝试给栅格图层CNRM_1绘制coords_df数据框里的坐标点,执行代码:
plot(CNRM_1) points(coords_df, pch=16)
栅格图层能正常显示,但坐标点完全看不到。相关数据如下:
head(coords_df)
x y
1 66.5 66.5
2 67.0 66.5
3 67.5 66.5
4 68.0 66.5
5 68.5 66.5
6 69.0 66.5
dput(head(CNRM_1))
structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.000796599906001783, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.000837936005501152, 0.000871552319509912,
0.00100709419004943, 0, 0, 0.0012105632950364, 0, 0, 0, 0, 0.00103714216752641,
0.00104333072151312, 0.000794459549629719, 0.00198828994745526,
0.00232027342913862, 0.00152433704387084, 0.00145669475130489,
0, 0, 0, 0.00106764166637498, 0.00133117261345192, 0.000751185736039872,
0.00205181592210355, 0.00235624992234934, 0.00160364560215041,
0.00225981611592611, 0, 0, 0, 0.00094873888615985, 0.00159345054110917,
0.000750502129892894, 0.00166613986487262, 0.00245039132047496,
0.00204705133350925, 0.00264872849452662, 0, 0, 0, 0.000704677797913744,
0.00158751407612522, 0.00105819696412664, 0.00112746366228874,
0.00220263084576204, 0.00300220982410644, 0.00268456275374276,
0, 0, 0, 0, 0.00112959733971154, 0.00153415586525737, 0.000503537889893361,
0.000948829835912542, 0.00221998566976762, 0.0031083088899198
), dim = c(10L, 20L), dimnames = list(c("1", "2", "3", "4", "5",
"6", "7", "8", "9", "10"), c("1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
"19", "20")))
dput(head(coords_df))
structure(list(x = c(66.5, 67, 67.5, 68, 68.5, 69), y = c(66.5,
66.5, 66.5, 66.5, 66.5, 66.5)), row.names = c(NA, 6L), class = "data.frame")
问题原因分析
从提供的dput(head(CNRM_1))可以看到,你只输出了栅格的数值矩阵,但栅格对象缺少空间参考(坐标系、范围等信息)。默认情况下,plot()绘制这种无空间参考的栅格时,会用行列号作为坐标轴(x轴1-20,y轴1-10),但你的coords_df里的坐标是66.5-69的x值和66.5的y值,明显不在当前绘图的坐标轴范围内,所以点无法显示。
解决步骤
1. 给栅格添加空间参考
首先需要为CNRM_1设置正确的范围(extent)和坐标系(如果有的话)。假设你的栅格每个像元的分辨率是0.5,且范围能覆盖coords_df的坐标,可以用raster包的相关函数设置:
library(raster) # 将矩阵转为栅格对象 CNRM_1 <- raster(CNRM_1) # 设置栅格范围:xmin, xmax, ymin, ymax,需根据实际数据调整 extent(CNRM_1) <- c(66, 76, 62, 67) # 若有明确坐标系,添加CRS(示例为WGS84) crs(CNRM_1) <- "+proj=longlat +datum=WGS84 +no_defs"
2. 重新绘制点
设置好空间参考后,再次执行绘图代码,可指定颜色让点更显眼:
plot(CNRM_1) points(coords_df$x, coords_df$y, pch=16, col="red")
验证方法
可以先查看栅格范围,确认是否包含目标坐标点:
extent(CNRM_1)
输出的范围需覆盖coords_df中的x(66.5-69)和y(66.5)值。
额外提示
- 若不确定栅格的正确范围,可查看原始数据的元信息(如NetCDF文件头),里面会包含xmin、xmax、ymin、ymax及分辨率。
- 明确指定
points()的x和y列更稳妥,避免因数据框列顺序出错导致问题。
内容的提问来源于stack exchange,提问作者CovetTachi

