在R

时间:2016-03-07 10:44:18

标签: r plot raster ellipse

我需要在光栅图上绘制一个椭圆。我尝试使用简单的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)

我得到的是; enter image description here

理想情况下,ps应显示为椭圆,但它是一个圆圈。另一方面,如果我绘制elp(创建ps的数据框),我会得到一个椭圆。

plot(elp)

enter image description here

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

请注意,您根本没有创建在水平方向上展平的椭圆。如下面的控制台输出所示,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))

spplot