线条在 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 创建
我在对齐我制作的绘图上的网格时遇到问题。基本上,这些图显示了 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 创建