线条在 rastertoPolygons 中不对齐

Lines don't align in rastertoPolygons

我在对齐我制作的绘图上的网格时遇到问题。基本上,这些图显示了 34x34 矩阵的结果,其中每个点的值为 0、1、2、3 并基于此着色。勾勒出细胞轮廓的线条与细胞的颜色并不完全匹配。我的代码和图片如下。

library(raster)

r<-raster(xmn=1,xmx=34,ymn=1,ymx=34,nrows=34,ncols=34)

data1<-read.csv(file ="mat_aligned.csv",row.names = 1)

numbers<-data.matrix(data1)

r[]<-numbers

breakpoints<-c(-1,0.1,1.1,2.1,3.1)

colors<-c("white","blue","green","red")

plot(r,breaks=breakpoints,col=colors)

plot(rasterToPolygons(r),add=TRUE,border='black',lwd=3)

如有任何帮助,我将不胜感激!

如果您不提供最小的独立可复制示例,则很难提供帮助。像这样

library(raster)
r <- raster(xmn=1,xmx=34,ymn=1,ymx=34,nrows=34,ncols=34)
values(r) <- sample(4, ncell(r), replace=T)
p <- rasterToPolygons(r)
plot(r)
lines(p)

我明白你所描述的,尽管它是最小的。解决方法可能是只绘制多边形

colors<-c("white","blue","green","red")
plot(p, col=colors[p$layer]) 

问题是基本的 R 图和网格的绘制使用不同的绘图系统。多边形将相对于绘图 window 保持不变(它们会随着 window 缩小而显得更窄),并且不会保留它们与底层绘图轴的关系,而彩色方块将调整大小以保留形状。您可能会发现通过调整 window 的大小可以使网格更好地匹配,但是当然,这并不理想。

解决此问题的最佳方法是使用专为绘图设计的特定方法 SpatialPolygonDataFrame,即 rasterToPolygons 生产的 S4 class。毕竟,这就是您 "meant" 创建这样一个情节的方式。

这是一个代表(显然我不得不制作一些随机数据,因为问题中没有共享你的数据):

library(raster)
r <- raster(xmn = 1, xmx = 34, ymn = 1, ymx = 34, nrows = 34, ncols = 34)
r[] <- data.matrix(as.data.frame(replicate(34, sample(0:3, 34, TRUE))))
colors <- c("white","blue","green","red")
spplot(rasterToPolygons(r), at = 0:4 - 0.5, col.regions = colors)

reprex package (v0.3.0)

于 2020-05-04 创建