Добавить легко читаемую шкалу в ggmap (используя пакет ggsn?)

Я работаю над вставкой шкалы масштаба в некоторые из моих карт. Я работаю с ggmaps и в настоящее время использую пакет ggsn для вставки шкалы. Тем не менее, эта шкала очень трудно читать на типах карт, с которыми я работаю (см. Карту ниже). Я хотел бы либо (а) найти способ сделать его более легким для чтения, (б) иметь масштабную линейку вне границ карты, либо (в) использовать другой пакет, который позволяет упростить настройку.

По сути, мой код выглядит примерно так. Этот пример должен быть легко воспроизводимым.

map <- get_map(location = c(146, 15), zoom = 8,
               maptype = “satellite”, source = "google") 

Map <- ggmap(map)

Map + ggsn::scalebar(x.min = 144.5, x.max = 147.5,
           y.min = 13.5, y.max = 16.5, 
           dist = 50, dd2km = TRUE, model = 'WGS84')

И создает карту, подобную приведенной ниже, где шкалу в нижнем правом углу трудно читать.

ggmap с масштабной шкалой

Есть идеи? Спасибо вам большое!

1 ответ

Решение

Версия для разработки scalebar у Github появились новые аргументы, st.color а также box.fill, которые позволяют лучше настроить бар.

Установите эту версию, используя:

devtools::install_github('oswaldosantos/ggsn')

И затем используйте, например:

ggmap(Map) + 
  my_scalebar(x.min = 144.5, x.max = 147.5,
            y.min = 13.5,  y.max = 16.5,
            dist = 50, dd2km = TRUE, model = 'WGS84',
            box.fill = c("yellow", "white), st.color = "white")

СТАРЫЙ ОТВЕТ

Я написал этот ответ о том, как изменить функцию, прежде чем обнаруживать более новую версию.

Я думаю, что лучший подход здесь состоит в том, чтобы изменить scalebar функция.

Во-первых, вам нужно загрузить ggsn Упакуйте и отредактируйте функцию:

library(ggsn)
my_scalebar <- edit(scalebar)

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

function (data = NULL, location = "bottomright", dist, height = 0.02, 
  st.dist = 0.02, st.bottom = TRUE, st.size = 5, dd2km = NULL, 
  model, x.min, x.max, y.min, y.max, anchor = NULL, facet.var = NULL, 
  facet.lev = NULL, box2_fill = "yellow", legend_color = "white")
{
  require(maptools)

Мы добавили 3 вещи:

  • Аргумент box2_fill со значением по умолчанию = "желтый"
  • Аргумент legend_color со значением по умолчанию = "белый"
  • требовать maptools потому что функция использует gcDestination() из этого пакета

Далее ищите строку, которая начинается gg.box2 и измените его, чтобы использовать значение для box2_fill:

  gg.box2 <- geom_polygon(data = box2, aes(x, y), fill = box2_fill, 
    color = "black")

Затем отредактируйте раздел в нижней части функции, чтобы использовать значение для legend_color:

else {
    gg.legend <- annotate("text", label = paste0(legend[, 
      "text"], "km"), x = x.st.pos, y = st.dist, size = st.size,
      color = legend_color)
  }

Сохранение закроет редактор и сохранит новую функцию my_scalebar на ваше рабочее место.

Теперь вы можете использовать новую функцию. Вы можете указать значения для новых аргументов box2_fill = а также legend_color =или просто попробуйте значения по умолчанию:

ggmap(Map) + 
  my_scalebar(x.min = 144.5, x.max = 147.5,
            y.min = 13.5,  y.max = 16.5,
            dist = 50, dd2km = TRUE, model = 'WGS84')

И если вы считаете, что ваши изменения полезны, вы можете предложить их разработчику пакета, используя запрос на загрузку в Github. ПРИМЕЧАНИЕ: похоже, что разработчик начал решать эту проблему, поскольку версия Github scalebar есть новый box.fill а также st.color аргументы.

Другие вопросы по тегам