Как добавить дополнительные основные линии сетки в ggplot в R

#r #ggplot2 #sf

#r #ggplot2 #sf

Вопрос:

У меня есть следующий набор данных:

 Simple feature collection with 6 features and 2 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -2486022 ymin: -1025641 xmax: 954903.6 ymax: 2252011
CRS:            EPSG:32119
          VAR     residual                       geometry
1 total_resid  0.052358204 MULTIPOLYGON (((-260020.6 -...
2 total_resid  0.051623652 MULTIPOLYGON (((904798.7 65...
3 total_resid -1.780438621 MULTIPOLYGON (((772940.8 57...
4 total_resid -0.012465629 MULTIPOLYGON (((429779.8 -9...
5 total_resid -0.009121893 MULTIPOLYGON (((7030.591 15...
6 total_resid  0.097626207 MULTIPOLYGON (((-2401716 17...
 

Если я помещу это здесь, dput это слишком долго, чтобы поместить это здесь. Мой вопрос, я хочу отобразить эти данные на сетке с основными линиями сетки в каждом градусе. Мой код выглядит так:

 facet_sources_State_Residuals = ggplot()   
  geom_sf(data = sources_State_Residuals, aes(fill=residual))   
  facet_wrap(~VAR, ncol=3, nrow=1)  
  theme(panel.grid.major = element_line(color = "white"))  
  scale_fill_gradient2(low='blue', mid='white', high='red', midpoint=0, limits=c(-0.25,0.25), oob=squish)   
  geom_sf(data = usbigcities, color = 'black')   labs(fill="USGS-PCRGLOB [m3/m2/year]")
 

И график выглядит так:
график

Но я хочу, чтобы между линиями сетки было расстояние в 1 градус вместо 10 градусов, как сейчас. Я уже пытался использовать breaks , но это не сработало.

Кто-нибудь может мне здесь помочь?

Ответ №1:

breaks работает scale_*_continuous для настройки основных линий сетки:

 library("ggplot2")
library("sf")
library("raster")

us <- raster::getData("GADM", country = "USA", level = 1) %>%
  st_as_sf %>%
  st_transform(32119) 
ggplot()  
  geom_sf(data = us)  
  coord_sf(expand = FALSE)  
  scale_x_continuous(breaks = seq(-130, -70, 5))  
  facet_wrap(~GID_0)
 

Карта

Вы указали отрицательные значения для breaks ?

Комментарии:

1. это действительно так! Вы также знаете, как уменьшить тики оси? Чтобы вы могли видеть линии, но имели только шаги 10 в качестве меток?

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

3. Это означает, что я должен использовать использовать 9 пустых строк в каждых 10 строках в последовательности от -130 до -70. Разве это не немного произвольно?

4. Если я помещу это туда, как scale_x_continuous(breaks = seq(-130, -60, 1), labels= c('-130','','','','','','','','','','-120','','','','','','','','','','-110','','','','','','','','','','-100','','','','','','','','','','-90','','','','','','','','','','-80','','','','','','','','','','-70','','','','','','','','','','-60')) тогда, я получу сообщение об ошибке «разрывы и метки разной длины». Я посчитал и проверил все дважды, но я не понимаю, почему они не одинаковой длины. Есть мысли?

5. Может быть, чище / проще добавить сетки (на более тонком уровне) вручную перед построением карты, например ggplot() geom_sf(data = st_graticule(us, lon = seq(-130, -70, 1)), colour="white") geom_sf(data = us) scale_x_continuous(breaks = seq(-130, -70, 5))