ggmap изменение размера карты

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

require(ggmap)
tenmile <- get_map(location = c(lon = -122.486328, lat = 48.862813),
    color = "color",
    source = "google",
    maptype = "roadmap",
    zoom = 12)
tenmile.map <- ggmap(tenmile, 
    extent = "device",
    ylab = "Latitude",
    xlab = "Longitude")+ggtitle("GEOMean for Data from Oct 2013-Nov 2014")
tenmile.map + geom_point(data=pp, aes(x=lon, y=lat, size=geomean), color="red", alpha=0.5) +      
geom_text(data=pp, aes(x=lon, y=lat, label = site), size=3, vjust = 1.25, hjust = -0.1)

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


person Danielle Love    schedule 13.01.2015    source источник
comment
Похоже, что ggmap не делать неквадратные карты, но, возможно, вы можете получить карту большего размера, обрезать изображение и использовать его как фон. Я предполагаю, что согласование координат будет болезненным, может быть здесь.   -  person andybega    schedule 13.01.2015


Ответы (2)


Ответ Сэнди Маспратт дает прямоугольную карту, но она растягивается. Чтобы получить нерастянутую карту, соотношение должно быть приведено к соотношению между расстоянием между параллелями и меридианами в месте карты. То есть:

отношение = 1/cos(широта)

Если широта указана в градусах, то получается:

отношение = 1/cos(pi*широта/180)

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

library(ggmap) library(mapproj) mapbcn <- get_map(location =
  'Barcelona, Catalonia', zoom = 13)

# square map (default) ggmap(mapbcn)

# map cropped by latitude 
ggmap(mapbcn) +                
  coord_fixed(ylim=c(41.36,41.41), 
              ratio=1/cos(pi*41.39/180))

# map cropped by longitude 
ggmap(mapbcn) +    
  coord_fixed(xlim=c(2.14, 2.18), 
              ratio=1/cos(pi*41.39/180))

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

person Pere    schedule 26.11.2017

Если вы хотите сохранить исходные пределы ограничивающей рамки, но просто изменить ее форму, вы можете настроить соотношение сторон. Если вы хотите изменить границы ограничительной рамки, получите карту, как и раньше, но установите ее границы с помощью coord_fixed() (или coord_cartesian()). Или вы можете настроить как соотношение сторон, так и пределы ограничительной рамки.

tenmile <- get_map(location = c(lon = -122.486328, lat = 48.862813),
  color = "color",
  source = "google",
  maptype = "roadmap",
  zoom = 12)
tenmile.map <- ggmap(tenmile, 
  ylab = "Latitude",
  xlab = "Longitude")+ggtitle("GEOMean for Data from Oct 2013-Nov 2014") +
  coord_fixed(xlim = c(-122.55, -122.40), ratio = 2/1)
person Sandy Muspratt    schedule 15.01.2015
comment
Спасибо за код Сэнди, но я не могу заставить его работать. - person Danielle Love; 17.01.2015
comment
Извините, пропустил ваш комментарий. Вам нужно объяснить, как вы ожидаете, что карта будет выглядеть. Я получаю карту, которая не является квадратной. - person Sandy Muspratt; 18.06.2015