Установите прозрачность фоновой карты с помощью 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: ggmap(map, darken = c(0.6, "white")).

введите описание изображения здесь

Это почти решает мою проблему, но, возможно, на самом деле есть (скрытая) опция для глобального снижения непрозрачности первого слоя карты (или, в более общем смысле, любого слоя на графике).


person grssnbchr    schedule 30.06.2016    source источник
comment
Вы можете добавлять на карту пользовательские стили... ggmap(get_googlemap("chicago", style=style_string)) см. ?get_googlemap документацию   -  person cory    schedule 30.06.2016
comment
Является ли название шуткой, или эта карта действительно показывает распространение гуманоидной выпечки в Центральной Европе?   -  person qdread    schedule 31.01.2017
comment
Почти - это показывает их произношение! Красный — это Крампус, синий — это Гриттибэнц, и вот как они выглядят: google.ch/   -  person grssnbchr    schedule 31.01.2017


Ответы (1)


Если вы не хотите настраивать параметр darken и не хотите углубляться в пользовательские стили для Карт Google, вы можете напрямую изменить объект ggmap.

ggmap по сути является символьной матрицей, где каждая ячейка представляет собой шестнадцатеричный код цвета, который должен там воспроизводиться. (Есть некоторые дополнительные атрибуты, которые описывают долготу и широту (в системе отсчета координат EPSG:4326) нижней левой и верхней правой точек ggmap, а также источник и уровень масштабирования.)

Вы можете использовать функцию adjustcolor() из базы R, чтобы взять цвет (в виде шестнадцатеричного кода, целого числа или строки символов — всего, что примет функция col2rgb()) и набрать вверх или вниз красный, зеленый, синий и альфа-канал. каналы. Альфа-канал управляет прозрачностью, где 1 полностью непрозрачен, а 0 полностью прозрачен.

Вот воспроизводимый пример...

Во-первых, получите данные meuse, которые поставляются с пакетом sp.

data(meuse)

Преобразуйте кадр данных в объект 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"))

Получите базовую карту 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

А вот и более прозрачно!

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

более прозрачный ggmap

person mikoontz    schedule 28.03.2018