R语言 如何在geom_sf中完全消除边框

xoefb8l8  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(668)

如何使用geom_sf完全消除边框?(网格是使用st_make_grid创建的。)我已经尝试了color=NAsize=0,但两者都不是我想要的。

ggplot() +
    geom_sf(data = plot_data, aes(fill = as.vector(dist)), color=NA, size=0) + 
    scale_fill_viridis(discrete=FALSE, name="", direction=-1) +
    geom_sf(data = states, fill=alpha("black", 0)) +
    theme_bw()

示例:

这涉及:How can I remove border lines when using geom_sf?

ghhaqwfi

ghhaqwfi1#

要删除使用st_make_grid创建的网格周围的边框,您可以在geom_sf中使用linetype美学,并将其设置为0或“空白”。这将删除网格的边框,同时仍保留填充颜色。您也可以添加color=NA美学,以删除网格中的任何剩余颜色。
以下是修改代码以从网格中删除边框的方法:

ggplot() +
    geom_sf(data = plot_data, aes(fill = as.vector(dist), linetype=0)) + 
    scale_fill_viridis(discrete=FALSE, name="", direction=-1) +
    scale_linetype_binned(range = c(0, 0)) +
    geom_sf(data = states, fill=alpha("black", 0)) +
    theme_bw()
mctunoxg

mctunoxg2#

这似乎与设备有关。我可以在我的计算机上重现您的问题,如下所示:

library(sf)
library(tidyverse)

states <- st_as_sf(maps::map("state", fill = TRUE, plot = FALSE)) %>%
  filter(ID %in% c("kansas", "oklahoma", "missouri", "arkansas")) %>%
  mutate(geom = st_crop(geom, c(xmin = -96.5, xmax = -94, 
                                ymin = 35, ymax = 37.25)))

plot_data <- st_make_grid(states, n = 80) %>%
  st_as_sf() %>%
  mutate(geom = x, 
         dist = st_distance(geom, 
                  st_as_sfc(list(st_point(c(-96, 36))), crs = "WGS84")))

ggplot() +
  geom_sf(data = plot_data, aes(fill = as.vector(dist)), size = 0, color = NA) + 
  scale_fill_viridis_c(name = "", direction = -1) +
  geom_sf(data = states, fill = alpha("black", 0), linewidth = 2) +
  theme_bw()

解决这个问题最简单的方法是,不要试图使线条消失,而只需将它们的颜色设置为与网格框相同。

ggplot() +
  geom_sf(data = plot_data, aes(fill = as.vector(dist),
                                color = after_scale(fill)), linewidth = 1) + 
  scale_fill_viridis_c(name = "", direction=-1) +
  geom_sf(data = states, fill = alpha("black", 0), linewidth = 2) +
  theme_bw()

相关问题