Проблемы со слоем карты в ggplot2 - PullRequest
0 голосов
/ 25 мая 2020

У меня возникли проблемы с завершением работы над картой для отчета. Думаю, я тепло отношусь к решениям, но еще не совсем понял их. Я был бы очень признателен за любую помощь в решениях, чтобы я мог, наконец, двигаться дальше!

1) Масштабная линейка НЕ ​​будет заполняться в коде MainMap и последующем графике Figure1. Это «исправлено» в коде MainMap, если я закомментирую слой карты «BCWA_land». Однако, когда я сохраняю слой карты «BCWA_land», он удаляет масштабную линейку и выдает следующую ошибку:

Warning message: Removed 3 rows containing missing values (geom_text). 

А это код:

MainMap <- ggplot(QOI) +
  geom_sf(aes(fill = quadID)) +
  scale_fill_manual(values = c("#6b8c42", 
                               "#70b2ae", 
                               "#d65a31")) +
  labs(fill = "Quadrants of Interest", 
  caption = "Figure 1: Map depicting the quadrants in the WSDOT project area as well as other quadrants of interest in the Puget Sound area.")+
  ggtitle("WSDOT Project Area and Quadrants of Interest") +
  scalebar(x.min = -123, x.max = -122.8, y.min = 47, y.max = 47.1, location = "bottomleft",
           transform = TRUE,  dist = 10, dist_unit = "km", st.size = 3, st.bottom = TRUE, st.dist = 0.1) +
  north(data = QOI, location = "topleft", scale = 0.1, symbol = 12, x.min = -123, y.min = 48.3, x.max = -122.7, y.max = 48.4) +
  theme_bw()+
  theme(panel.grid= element_line(color = "gray50"),
        panel.background = element_blank(),
        panel.ontop = TRUE,
        legend.text = element_text(size = 11, margin = margin(l = 3), hjust = 0), 
        legend.position = c(0.95, 0.1),
        legend.justification = c(0.85, 0.1), 
        legend.background = element_rect(colour = "#3c4245", fill = "#f4f4f3"),
        axis.title = element_blank(),
        plot.title = element_text(face = "bold", colour = "#3c4245", hjust = 0.5, margin = margin(b=10, unit = "pt")),
        plot.caption = element_text(face = "italic", colour = "#3c4245", margin = margin(t = 7), hjust = 0, vjust = 0.5)) +
  geom_sf(data = BCWA_land) +  #this is what I've tried to comment out to determine the scale bar problem
  xlim (-123.1, -121.4) + 
  ylim (47.0, 48.45)

MainMap

InsetRect <- data.frame(xmin=-123.2, xmax=-122.1, ymin=47.02, ymax=48.45)

InsetMap <- ggplotGrob( ggplot( quads) +
  geom_sf(aes(fill = "")) +
  scale_fill_manual(values = c("#eefbfb"))+
  geom_sf(data = BCWA_land) + 
  scale_x_continuous(expand = c(0,0), limits = c(-124.5, -122.0)) +
  scale_y_continuous(expand = c(0,0), limits = c(47.0, 49.5)) +   
  geom_rect(data = InsetRect,aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
              color="#3c4245",
              size=1.25,
              fill=NA,
              inherit.aes = FALSE) +
    theme_bw()+
    theme(legend.position = "none",
          panel.grid = element_blank(),
          axis.title = element_blank(),
          axis.text = element_blank(),
          axis.ticks = element_blank(),
          plot.margin = margin(0,0,0,0)))
InsetMap

Figure1 <- MainMap  + 
 annotation_custom(grob = InsetMap, xmin = -122.2, xmax = -121.3,
                    ymin = 47.75, ymax = 48.5) 


Figure1

Как видите У меня не возникает эта проблема или ошибка для стрелки на север, поэтому я не совсем уверен, что происходит с масштабной линейкой!

Эта проблема, вероятно, слишком велика, но я ДЕЙСТВИТЕЛЬНО не хочу, чтобы линии сетки отображались на InsetMap, и надеялся, что InsetMap будет наложено поверх MainMap без линий сетки, поскольку у меня эти параметры были установлены на element_blank() в коде InsetMap.

Вот изображение моего графика. Если вам нужны данные для этого, дайте мне знать. Поскольку это шейп-файлы, данные громоздки и не слишком подходят для ограничения символов SO для сообщения ...

enter image description here

Если у кого-то есть понимание решение (я) я был бы очень признателен! Спасибо за уделенное время!

1 Ответ

0 голосов
/ 27 мая 2020

Проблема заключалась в звонке

 xlim (-123.1, -121.4) + 
  ylim (47.0, 48.45)

, который я сделал. Вместо этого я использовал coord_sf(xlim = c(min, max), ylim = c(min, max)). Я подумал, что это будет полезно для тех, кто может оказаться на моем месте позже!

По сути, разница между установкой пределов для графика с использованием только вызовов x / y lim заключается в том, что они усекают данные, доступные в вашем наборе данных, тогда как вызов corre_sf просто «фокусирует» ваш график на этом экстента, если вы сделаете это, не изменяя данные, которые есть в вашем наборе данных.

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