Реорганизовать sf multi-plot и добавить легенду - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь построить две карты рядом, используя sf::plot, и мне не удается заставить его работать.Есть две проблемы: первая заключается в том, что графики создаются друг на друга, а не рядом, а вторая - в том, что я теряю легенду.

Вот пример и дополнительные пояснения.

library(sf) 
library(dplyr)

# preparing the shapefile
nc <- st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE) %>% 
  select(AREA, PERIMETER) %>% 
  mutate(AREA = as.factor(AREA<median(AREA)))

Если я строю каждое поле независимо:

plot(nc[,1])

enter image description here

plot(nc[,2])

enter image description here

Оба изображения хороши, с легендой и всем, но я хочу, чтобы оба изображения были на одной панели.sf::plot предлагает эту функцию, встроенную, как описано в https://r -spatial.github.io / sf / article / sf5.html # geometry-with-attribute-sf :

plot(nc)

enter image description here

Я теряю легенду, и они друг над другом, а не рядом.В ?plot вы можете прочитать:

Для большего контроля над отдельными картами установите параметр mfrow с номиналом перед построением графика и постройте одиночные карты одну за другой.

Но когда я это сделаю, это не сработает:

par(mfrow=c(1,2))
plot(nc[,1])
plot(nc[,2])
par(mfrow=c(1,1))

Есть идеи, как построить 2 карты рядом с sf?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Наконец, это была проблема в документации.Чтобы иметь возможность использовать par с sf::plot, вам нужно сделать:

par(mfrow=c(1,2))
plot(st_geometry(nc[,1]))
plot(st_geometry(nc[,2]))
par(mfrow=c(1,1))

или

par(mfrow=c(1,2))
 plot(nc[,1], key.pos = NULL, reset = FALSE)
 plot(nc[,2], key.pos = NULL, reset = FALSE)
par(mfrow=c(1,1))

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

см .: https://github.com/r-spatial/sf/issues/877

0 голосов
/ 24 октября 2018

Я не нашел решения в пакете sf.Я нашел это, что, вероятно, хорошо работает для вас

library(ggplot2)
area<-ggplot() + geom_sf(data = nc[,1], aes(fill = AREA))
perim<-ggplot() + geom_sf(data = nc[,2], aes(fill = PERIMETER))
gridExtra::grid.arrange(area,perim,nrow=1)
...