gpt4 book ai didi

r - 将栅格添加到ggmap基本 map : set alpha (transparency) and fill color to inset_raster() in ggplot2

转载 作者:行者123 更新时间:2023-12-04 03:36:53 28 4
gpt4 key购买 nike

我想在ggplot2中绘制带有覆盖GoogleMaps基本 map 的栅格的 map 。因此,我像这样使用get_map()insert_raster():

library(ggplot2)
library(ggmap)

bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid"))

bm + inset_raster(as.raster(r), xmin = r@extent[1], xmax = r@extent[2],
ymin = r@extent[3], ymax = r@extent[4])

是否可以设置 alpha并更改 fill颜色?

结果看起来像这样:
enter image description here

最佳答案

没有fortify甚至更快:

阅读下面的原始帖子以获取更多信息

this blog entry中,我发现我们可以直接在ggplot::geom_polygon()中使用空间多边形

r <- raster(system.file("external/test.grd", package="raster"))
# just to make it reproducible with ggmap we have to transform to wgs84
r <- projectRaster(r, crs = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))

rtp <- rasterToPolygons(r)

bm <- ggmap(get_map(location = bbox(rtp), maptype = "hybrid", zoom = 13))
bm +
geom_polygon(data = rtp,
aes(x = long, y = lat, group = group,
fill = rep(rtp$test, each = 5)),
size = 0,
alpha = 0.5) +
scale_fill_gradientn("RasterValues", colors = topo.colors(255))

如果您只需要可视化某些内容,如何处理绘制速度

如下所述,在绘制大量像素时,这种绘制可能会变得非常缓慢。因此,在将其转换为多边形之前,您可能会考虑减少像素的数量(在大多数情况下,这实际上并不会减少 map 中的信息量)。因此, raster::aggregate可用于将像素数量减少到合理的数量。

该示例显示了如何将像素数量减少4数量级(即2 * 2,水平*垂直)。有关更多信息,请参见 ?raster::aggregate
r <- aggregate(r, fact = 2)
# afterwards continue with rasterToPolygons(r)...

原始帖子:

一段时间后,我找到了解决此问题的方法。 将栅格转换为多边形! 这个想法基本上是在 Marc Needham's blog post之后实现的。

但是,有一个缺点:大量的多边形会使ggplot变得非常慢,而您将不可避免地遇到这些多边形。但是,您可以通过绘制到 png()(或其他)设备中来加快处理速度。

这是一个代码示例:
library(raster)
library(ggplot2)
library(ggmap)

r <- raster(....) # any raster you want to plot
rtp <- rasterToPolygons(r)
rtp@data$id <- 1:nrow(rtp@data) # add id column for join

rtpFort <- fortify(rtp, data = rtp@data)
rtpFortMer <- merge(rtpFort, rtp@data, by.x = 'id', by.y = 'id') # join data

bm <- ggmap(get_map(location = "Shanghai", maptype = "hybrid", zoom = 10))

bm + geom_polygon(data = rtpFortMer,
aes(x = long, y = lat, group = group, fill = layer),
alpha = 0.5,
size = 0) + ## size = 0 to remove the polygon outlines
scale_fill_gradientn(colours = topo.colors(255))

结果是这样的:

Raster with an alpha on a ggmap base map

关于r - 将栅格添加到ggmap基本 map : set alpha (transparency) and fill color to inset_raster() in ggplot2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com