【问题标题】:Add an ellipse on raster plot in R在R中的光栅图上添加一个椭圆
【发布时间】:2016-03-07 10:44:17
【问题描述】:

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

有人可以帮忙吗?

【问题讨论】:

标签: r plot raster ellipse


【解决方案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))

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2011-04-15
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2015-10-20
    • 2014-07-30
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多