#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))