R: Центрирование карты в ggplot2 - PullRequest
0 голосов
/ 01 мая 2018

Я бы хотел центрировать контур Джерси в середине ограничительной рамки (см. Прикрепленное изображение ниже)

enter image description here

Так выглядит шейп-файл перед использованием coord_cartesian(xlim=c(200000.732,905000.646), ylim=c(-5812.321,900000.543)) enter image description here

Код выглядит следующим образом:

graph1<-ggplot()+
  geom_polygon(data=middlestates,colour="black",fill="#D3D3D3",aes(x=long,y=lat,group=group))+
  geom_polygon(data=df,colour="black",aes(x=long,y=lat,group=group,fill=ALG))+
  ggtitle("Figure 2.2A: Assessment Results for\nGeneral Aquatic Life Use, Spatial Extent")+
  xlab("")+
  ylab("")+
  coord_cartesian(xlim=c(200000.732,905000.646), ylim=c(-5812.321,900000.543))+
  ggsn::scalebar(df,location="bottomleft",dist = 50,st.dist=0.02,st.size=3, height=0.01)+
  scale_fill_manual("Aquatic Life Designated\nUse 2014 Assessment",values=c((values=c(colors))))+
  cowplot::background_grid(major= "none",minor = "none") +
  theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(),
        axis.text.y = element_blank(), axis.ticks.y = element_blank(),
        axis.line = element_blank(),
        panel.background = element_blank(),
        legend.position=c(0.8,0.2),
        panel.border = element_rect(fill=NA),
        legend.background = element_blank(),
        legend.text = element_text(size=12),
        legend.title = element_text(colour="black", size=12, face="bold"),
        plot.title=element_text(size=15, face="bold",hjust=0.5))

pdf(file="Figure 2.2A.pdf",width=13,height=12,paper="a4")
north2(graph1, x = 0.10, y = 0.89, scale = 0.1, symbol = 3)
dev.off()

В любом случае можно сделать это без изменения

coord_cartesian(xlim=c(200000.732,905000.646), ylim=c(-5812.321,900000.543)) 

линия ?? Я хотел бы сохранить вид карты. Любая помощь или отзывы будут с благодарностью! Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я думаю, что это должно быть что-то вроде этого.

library(ggplot2)
library(ggmap)
library(maps)
library(mapdata)


states <- map_data("state")
dim(states)
#> [1] 15537     6

head(states)

nj_df <- subset(states, region == "new jersey")
head(nj_df)

counties <- map_data("county")
nj_county <- subset(counties, region == "new jersey")
head(nj_county)


nj_base <- ggplot(data = nj_df, mapping = aes(x = long, y = lat, group = group)) + 
  coord_fixed(1.3) + 
  geom_polygon(color = "black", fill = "gray")
nj_base + theme_nothing()


bj_base + theme_nothing() + 
  geom_polygon(data = nj_county, fill = NA, color = "white") +
  geom_polygon(color = "black", fill = NA)  # get the state border back on top
0 голосов
/ 02 мая 2018

Вот макет похожих шейп-файлов. Я использую sf, потому что он отлично подходит для быстрой фильтрации или анализа пространственных данных, работает как dplyr, но для фигур, и потому что он легко наносит графики с самой новой версией ggplot2 (возможно, потребуется использовать версию github) , Если ваши шейп-файлы имеют формат Spatial *, вы можете использовать st_as_sf для создания sf объекта.

Чтобы получить sf штатов и sf городов Нью-Джерси, я использовал функции из tigris, которые загружают шейп-файлы из переписи. Это был самый простой способ получить шейп-файлы; вы используете те, с которыми уже работаете.

Я отфильтровал объект mid_sf, который представляет собой sf состояний в регионе, только для Нью-Джерси, затем передал его в st_buffer, чтобы разместить вокруг него небольшой буфер, а затем st_bbox, чтобы получить его ограничительная коробка.

Существует два графика: один без заданных пределов координат, а другой с заданными на основе nj_bbox.

library(tidyverse)
library(sf)

us_sf <- tigris::states(class = "sf", cb = T)

mid_sf <- us_sf %>%
    filter(NAME %in% c("New York", "New Jersey", "Pennsylvania", "Connecticut", "Delaware", "Rhode Island", "Massachusetts", "Maryland", "Virginia", "West Virginia"))

nj_towns_sf <- tigris::county_subdivisions(state = "NJ", class = "sf", cb = T)

# dist is in degrees latitude & longitude
nj_bbox <- mid_sf %>%
    filter(NAME == "New Jersey") %>%
    st_buffer(dist = 0.15) %>%
    st_bbox()
#> Warning in st_buffer.sfc(st_geometry(x), dist, nQuadSegs): st_buffer does
#> not correctly buffer longitude/latitude data

nj_bbox
#>      xmin      ymin      xmax      ymax 
#> -75.70961  38.77852 -73.74398  41.50742

nj_map <- ggplot() +
    geom_sf(data = mid_sf, color = "gray40", fill = "white", size = 0.5) +
    geom_sf(data = nj_towns_sf, color = "gray20", fill = "tomato", alpha = 0.7, size = 0.25)

nj_map

nj_map +
    coord_sf(ndiscr = 0, xlim = c(nj_bbox$xmin, nj_bbox$xmax), ylim = c(nj_bbox$ymin, nj_bbox$ymax))

Создано в 2018-05-02 пакетом Представ (v0.2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...