问题描述
我正在尝试修复字幕,但是创建字幕时遇到了麻烦。我想要为类(填充),形状限制(颜色),点(颜色)和网格(填充= NA)添加标题。我将它们全部放在aes ()
中,但没有得到预期的结果。有谁能够帮助我?谢谢!
library(geobr)
library(sf)
library(ggplot2)
library(ggspatial)
#Directory
getwd()
#Download spatial data ------------------------------------------------
download.file(url = "http://geo.fbds.org.br/SP/RIO_CLARO/USO/SP_3543907_USO.dbf",destfile = "SP_3543907_USO.dbf",mode = "wb")
download.file(url = "http://geo.fbds.org.br/SP/RIO_CLARO/USO/SP_3543907_USO.prj",destfile = "SP_3543907_USO.prj",mode = "wb")
download.file(url = "http://geo.fbds.org.br/SP/RIO_CLARO/USO/SP_3543907_USO.shp",destfile = "SP_3543907_USO.shp",mode = "wb")
download.file(url = "http://geo.fbds.org.br/SP/RIO_CLARO/USO/SP_3543907_USO.shx",destfile = "SP_3543907_USO.shx",mode = "wb")
#Import spatial data --------------------------------------------------
uso <- sf::st_read("SP_3543907_USO.shp")
uso
plot(uso$geometry)
#Area limit
rio_claro_limit <- geobr::read_municipality(code_muni = 3543907,year = 2015)
rio_claro_limit
plot(rio_claro_limit$geom)
#Random sample points
set.seed(123)
pts <- st_sample(uso,size = 20,type="random") %>% st_sf
#Grid 50km x 50km
grid_50 <- st_make_grid(uso,cellsize = c(5000,5000)) %>%
st_sf(grid_id = 1:length(.))
#Labels grid
grid_lab <- st_centroid(grid_50) %>% cbind(st_coordinates(.))
#Points in grid
pts %>% st_join(grid_50,join = st_intersects) %>% as.data.frame
#Map --------------------------------------------------------------------
ggplot() +
geom_sf(data = uso,aes(fill = CLASSE_USO,color = NA)) +
geom_sf(data = rio_claro_limit,aes(color = 'black',fill = NA)) +
geom_sf(data = pts,aes(color = 'red'),size = 1.7) +
geom_sf(data = grid_50,aes(fill=NA),lwd = 0.3) +
geom_text(data = grid_lab,aes(x = X,y = Y,label = grid_id),size = 2) +
xlab("")+
ylab("")+
scale_fill_manual(name="Classes de Uso",values = c("blue","orange","gray30","forestgreen","green",NA))+
scale_color_identity(guide = "legend")
解决方法
您的期望结果可以这样实现:
-
我将所有
fill=NA
和color=NA
从aes()
语句中移出了。与往常一样,如果您要固定颜色,在特定值上填充或更一般地填充任何aes,则最好将其放在aes()之外,除非您希望它出现在图例中。 -
将所谓的
key_glyph
设置为"point"
,即图例中在图例中绘制的图标。
由于这些步骤还消除了填充键周围的黑色边框,因此我添加了guides
层以将其恢复。我个人会删除黑色边框,但是,这是您的情节。 (:
library(geobr)
library(sf)
library(ggplot2)
library(ggspatial)
ggplot() +
geom_sf(data = uso,aes(fill = CLASSE_USO),color = NA) +
geom_sf(data = rio_claro_limit,aes(color = 'black'),fill = NA,key_glyph = "point") +
geom_sf(data = pts,aes(color = 'red'),size = 1.7,key_glyph = "point") +
geom_sf(data = grid_50,lwd = 0.3) +
geom_text(data = grid_lab,aes(x = X,y = Y,label = grid_id),size = 2) +
xlab("")+
ylab("")+
scale_fill_manual(name="Classes de Uso",values = c("blue","orange","gray30","forestgreen","green",NA)) +
guides(fill = guide_legend(override.aes = list(color = "black"))) +
scale_color_identity(guide = "legend")