在 R 中的光栅图上添加一个椭圆

Add an ellipse on raster plot in R

我需要在光栅图上绘制 ellipse。我尝试使用简单的 plot(r1)(r1 是栅格图层)绘制栅格,然后使用 add=T 进行 ellipse 绘图,但它不起作用。然后我尝试 axes=F 绘制光栅,并再次尝试 add=T 绘制 ellipse。还是不行。

所以我尝试将 ellipse 数据转换为数据帧并尝试添加到栅格图中。

#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 应该显示为 ellipse 但它是一个圆圈。另一方面,如果我绘制 elp(创建 ps 的数据框),我会得到一个 ellipse.

plot(elp)

有人可以帮忙吗?

请注意,您根本没有创建在水平方向上变平的椭圆。如下面的控制台输出所示,ps 的水平和垂直范围几乎相等。

> diff(range(x))
[1] 0.2999998
> diff(range(y))
[1] 0.2999999

我宁愿假设上面描绘的椭圆形状源于绘图设备的大小。为了首先创建一个椭圆,您需要执行以下操作(注意 xy 相关扩展因子之间的区别)。

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))