使用ggmap设置背景地图的不透明度

wns*_*mth 5 r ggplot2 ggmap

使用ggmapggplot以下代码...(不可重现,但imho没有必要了解问题).

map <- get_googlemap(center = c(lon = 10.64, lat = 50.56), maptype = "terrain", source = "google", zoom = 6, language = "de-DE", color = "bw")

ggmap(map) + 
  geom_point(data = frage_3_daten, aes(x = lng_google, y = lat_google, colour = pronunciation_id), alpha = 0.2) + 
  scale_colour_hue(name = "Aussprache", labels = c("Krampus", "Grittibänz")) +
  ggtitle("Gebäck in Form einer menschlichen Gestalt") +
  xlab("Länge") + ylab("Breite") +
  theme_srf()
Run Code Online (Sandbox Code Playgroud)

我可以在德语欧洲之上制作这张美丽的点图.

在此输入图像描述

现在:我唯一的(也是希望很简单的)问题是:如何降低背景图层的不透明度,使点变得更重要?

我管理下面的"黑客"通过设置darken参数:ggmap(map, darken = c(0.6, "white")).

在此输入图像描述

这几乎解决了我的问题,但也许实际上有一个(隐藏的)选项可以全局降低第一个地图图层(或更一般地说,图中任何图层)的不透明度.

mik*_*ntz 9

如果您不想调整darken参数,也不想深入研究 Google 地图的自定义样式,则可以ggmap直接修改对象。

ggmap本质上是一个字符矩阵,其中每个单元是用于彩色被存在再现的十六进制代码。(有一些额外的属性描述了 左下角和右上角点的经纬度(在 EPSG:4326 坐标参考系统中)ggmap,以及源和缩放级别。)

您可以使用adjustcolor()base 中的函数R来获取颜色(作为十六进制代码、整数或字符串——该col2rgb()函数可以接受的任何内容)并向上或向下拨动红色、绿色、蓝色和 alpha 通道。Alpha 通道控制透明度,其中 1 表示完全不透明,0 表示完全透明。

这是一个可重现的例子......

首先,获取meuse数据,随sp包一起提供。

data(meuse)
Run Code Online (Sandbox Code Playgroud)

将数据框转换为sp对象,为其分配适当的坐标参考系统(我在这里找到),然后将其坐标参考系统转换为经度/纬度。

coordinates(meuse) = ~x+y
proj4string(meuse) <- "+init=epsg:28992 +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957388243134,0.343987817378283,-1.87740163998045,4.0725 +units=m +no_defs"
meuse <- spTransform(meuse, CRS("+init=epsg:4326"))
Run Code Online (Sandbox Code Playgroud)

使用所有点的近似中心获取谷歌底图。我使用与您相同的其他参数,但将缩放设置得更高,因为这些点彼此非常接近。

meuse_basemap <- get_map(location = colMeans(coordinates(meuse)), 
                         maptype = "terrain", 
                         source = "google", 
                         zoom = 13, 
                         language = "de-DE", 
                         color = "bw")
Run Code Online (Sandbox Code Playgroud)

这是我修改ggmap以使其透明的地方。我将属性保存为一个对象,以便我可以将相同的属性重新分配给更透明的ggmap. 我找不到一种方法来修改ggmapin place的值而不剥离ggmap属性(这意味着修改后ggmapggmap()函数不适用于该函数)。

meuse_basemap_attributes <- attributes(meuse_basemap)
Run Code Online (Sandbox Code Playgroud)

创建一个与 Google 底图尺寸相同的矩阵,但每个单元格中的所有颜色十六进制代码都调整为透明度的一半。

meuse_basemap_transparent <- matrix(adjustcolor(meuse_basemap, 
                                                alpha.f = 0.5), 
                                    nrow = nrow(meuse_basemap))
Run Code Online (Sandbox Code Playgroud)

将保存的属性分配给修改后的矩阵以将其恢复为可用的ggmap.

attributes(meuse_basemap_transparent) <- meuse_basemap_attributes
Run Code Online (Sandbox Code Playgroud)

这是原始情节:

ggmap(meuse_basemap) +
  geom_point(data = as.data.frame(meuse), 
             aes(x = x, y = y, color = dist), 
             cex = 2)
Run Code Online (Sandbox Code Playgroud)

原始 ggmap

这是更透明的!

ggmap(meuse_basemap_transparent) +
  geom_point(data = as.data.frame(meuse), 
             aes(x = x, y = y, color = dist), 
             cex = 2)
Run Code Online (Sandbox Code Playgroud)

更透明的ggmap