我需要在光栅图上绘制一个椭圆。我尝试使用简单的plot(r1)
(r1是栅格图层)绘制栅格,然后使用add=T
绘制椭圆绘图,但它不起作用。然后我尝试axes=F
绘制栅格,然后再次尝试add=T
寻找椭圆。它仍然无法运作。
所以我尝试将椭圆数据转换为数据帧并尝试添加到栅格图。
#Creating a raster
r <- matrix(sample(1:400),20,20)
r1<-raster(r)
#Creating ellipse with given mean and standard deviation values
theta <- seq(0, 2 * pi, length=(2000))
x <- 0.2 - 0.15 * cos(theta)
y <- 0.5 - 0.15 * sin(theta)
elp<- cbind(na.omit(x),na.omit(y))
#Converting ellipse data frame (elp) to SpatialDataFrame (ps)
ps <- SpatialPolygons(list(Polygons(list(Polygon(elp)),2)))
#Plotting raster with ellipse
plot(r1)
plot(ps, add=T)
理想情况下,ps
应显示为椭圆,但它是一个圆圈。另一方面,如果我绘制elp
(创建ps的数据框),我会得到一个椭圆。
plot(elp)
有人可以帮忙吗?
答案 0 :(得分:1)
请注意,您根本没有创建在水平方向上展平的椭圆。如下面的控制台输出所示,ps
的水平和垂直范围几乎相等。
> diff(range(x))
[1] 0.2999998
> diff(range(y))
[1] 0.2999999
我宁愿假设上图所示的椭圆体形状源于绘图设备的大小。为了首先创建椭圆,您需要执行以下操作(请注意x
和y
相关扩展因子之间的差异)。
x <- 0.2 - 0.15 * cos(theta)
y <- 0.5 - 0.05 * sin(theta)
elp <- cbind(na.omit(x),na.omit(y))
ps <- SpatialPolygons(list(Polygons(list(Polygon(elp)),2)))
一旦有了合适的椭圆,您就可以将其显示在RasterLayer
之上,例如使用
library(latticeExtra)
spplot(r1, alpha.regions = 0.5, scales = list(draw = TRUE)) +
layer(sp.polygons(ps, col = "black", lwd = 2))