使用ggmap设置背景图的不透明度
Set opacity of background map with ggmap
使用 ggmap
和 ggplot
以及以下代码...(不可重现,但恕我直言,理解问题不是必需的)。
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()
我可以在讲德语的欧洲制作这张美丽的点图。
现在: 我唯一的(希望是简单的)问题是:如何降低背景层的不透明度,使点变得更重要?
我通过设置 darken
参数管理了以下 "hack":ggmap(map, darken = c(0.6, "white"))
.
这几乎解决了我的问题,但也许实际上有一个(隐藏的)选项可以全局降低第一个地图层(或更一般地,图中任何层的不透明度)。
如果您不想调整 darken
参数,并且不想深入研究 Google 地图的自定义样式,您可以修改 ggmap
直接反对。
ggmap
本质上是一个字符矩阵,其中每个单元格都是十六进制代码,表示要在其中再现的颜色。 (有一些额外的属性描述 ggmap
的左下点和右上点的经度和纬度(在 EPSG:4326 坐标参考系统中),以及源和缩放级别。)
您可以使用基础 R
中的 adjustcolor()
函数来获取颜色(作为十六进制代码、整数或字符串——任何 col2rgb()
函数将接受)并调高或调低红色、绿色、蓝色和 alpha 通道。 Alpha 通道控制透明度,其中 1 完全不透明,0 完全透明。
这是一个可重现的例子...
首先获取meuse
数据,sp
包中自带。
data(meuse)
将数据帧转换为 sp
对象,为其分配适当的坐标参考系(我发现 here),然后将其坐标参考系转换为 longitude/latitude.
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"))
使用所有点的近似中心得到Google底图。我使用与您相同的其他参数,但将缩放设置得更高,因为这些点彼此非常接近。
meuse_basemap <- get_map(location = colMeans(coordinates(meuse)),
maptype = "terrain",
source = "google",
zoom = 13,
language = "de-DE",
color = "bw")
这里是我修改 ggmap
使其透明的地方。我将属性保存为一个对象,以便我可以将相同的属性重新分配给更透明的 ggmap
。我找不到一种方法来只修改 ggmap
的值而不剥离 ggmap
属性(这意味着修改后的 ggmap
不适用于 ggmap()
函数).
meuse_basemap_attributes <- attributes(meuse_basemap)
创建一个与 Google 底图尺寸相同的矩阵,但每个单元格中的所有颜色十六进制代码都调整为透明度的一半。
meuse_basemap_transparent <- matrix(adjustcolor(meuse_basemap,
alpha.f = 0.5),
nrow = nrow(meuse_basemap))
将保存的属性分配给修改后的矩阵,将其变回可用的ggmap
。
attributes(meuse_basemap_transparent) <- meuse_basemap_attributes
原剧情如下:
ggmap(meuse_basemap) +
geom_point(data = as.data.frame(meuse),
aes(x = x, y = y, color = dist),
cex = 2)
这是更透明的!
ggmap(meuse_basemap_transparent) +
geom_point(data = as.data.frame(meuse),
aes(x = x, y = y, color = dist),
cex = 2)
使用 ggmap
和 ggplot
以及以下代码...(不可重现,但恕我直言,理解问题不是必需的)。
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()
我可以在讲德语的欧洲制作这张美丽的点图。
现在: 我唯一的(希望是简单的)问题是:如何降低背景层的不透明度,使点变得更重要?
我通过设置 darken
参数管理了以下 "hack":ggmap(map, darken = c(0.6, "white"))
.
这几乎解决了我的问题,但也许实际上有一个(隐藏的)选项可以全局降低第一个地图层(或更一般地,图中任何层的不透明度)。
如果您不想调整 darken
参数,并且不想深入研究 Google 地图的自定义样式,您可以修改 ggmap
直接反对。
ggmap
本质上是一个字符矩阵,其中每个单元格都是十六进制代码,表示要在其中再现的颜色。 (有一些额外的属性描述 ggmap
的左下点和右上点的经度和纬度(在 EPSG:4326 坐标参考系统中),以及源和缩放级别。)
您可以使用基础 R
中的 adjustcolor()
函数来获取颜色(作为十六进制代码、整数或字符串——任何 col2rgb()
函数将接受)并调高或调低红色、绿色、蓝色和 alpha 通道。 Alpha 通道控制透明度,其中 1 完全不透明,0 完全透明。
这是一个可重现的例子...
首先获取meuse
数据,sp
包中自带。
data(meuse)
将数据帧转换为 sp
对象,为其分配适当的坐标参考系(我发现 here),然后将其坐标参考系转换为 longitude/latitude.
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"))
使用所有点的近似中心得到Google底图。我使用与您相同的其他参数,但将缩放设置得更高,因为这些点彼此非常接近。
meuse_basemap <- get_map(location = colMeans(coordinates(meuse)),
maptype = "terrain",
source = "google",
zoom = 13,
language = "de-DE",
color = "bw")
这里是我修改 ggmap
使其透明的地方。我将属性保存为一个对象,以便我可以将相同的属性重新分配给更透明的 ggmap
。我找不到一种方法来只修改 ggmap
的值而不剥离 ggmap
属性(这意味着修改后的 ggmap
不适用于 ggmap()
函数).
meuse_basemap_attributes <- attributes(meuse_basemap)
创建一个与 Google 底图尺寸相同的矩阵,但每个单元格中的所有颜色十六进制代码都调整为透明度的一半。
meuse_basemap_transparent <- matrix(adjustcolor(meuse_basemap,
alpha.f = 0.5),
nrow = nrow(meuse_basemap))
将保存的属性分配给修改后的矩阵,将其变回可用的ggmap
。
attributes(meuse_basemap_transparent) <- meuse_basemap_attributes
原剧情如下:
ggmap(meuse_basemap) +
geom_point(data = as.data.frame(meuse),
aes(x = x, y = y, color = dist),
cex = 2)
这是更透明的!
ggmap(meuse_basemap_transparent) +
geom_point(data = as.data.frame(meuse),
aes(x = x, y = y, color = dist),
cex = 2)