使用geom_sf绘图时无法移除网格线的技术问询
嘿,这个问题我之前也碰到过!用geom_sf绘图时,常规的theme(panel.grid.major = element_blank())确实没法移除那些网格线——这是因为geom_sf用的是专门的地理坐标系统,网格线的控制逻辑和普通ggplot散点图不一样。
问题根源
当你调用geom_sf时,ggplot会自动启用coord_sf()坐标系统,这里的网格线(经纬网)是作为坐标系统的一部分来渲染的,而不是普通ggplot里的面板网格元素,所以直接修改theme里的panel.grid参数不会生效。
解决方法
有两种简单的方式可以移除这些网格线:
方式1:配合coord_sf()修改theme
虽然geom_sf会自动添加coord_sf(),但明确写出它之后,再用theme设置就能生效:
library(tidyverse) library(sf) # 读取示例数据 nc <- system.file("shape/nc.shp", package = "sf") %>% st_read(quiet = TRUE) # 移除网格线的绘图代码 nc %>% ggplot() + geom_sf() + coord_sf() + # 明确指定坐标系统 theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank() )
方式2:直接在coord_sf()中关闭经纬网
更直接的方法是在coord_sf()里设置graticule = FALSE,一步到位:
nc %>% ggplot() + geom_sf() + coord_sf(graticule = FALSE)
如果之后你还想调整其他地理坐标相关的样式,比如坐标轴标签、缩放比例等,都可以在coord_sf()里找到对应的参数哦!
内容的提问来源于stack exchange,提问作者tomw
相关产品推荐
相关产品推荐

