2016-03-07 67 views
2

我需要在栅格图上绘制一个椭圆。我尝试用简单的plot(r1)(r1是栅格图层)绘制栅格,然后用add=T绘制椭圆,但它不起作用。然后我试图axes=F绘制栅格,并再次尝试add=T的椭圆。它仍然不起作用。在栅格图上添加一个椭圆R

所以我尝试将椭圆数据转换为数据框,并尝试添加到栅格图。

#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

是否有人可以帮助这一点?

+0

[如何做出了巨大的ř重现的实例?](http://stackoverflow.com/questions/5963269) – zx8754

回答

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