You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ggrough独立控制地图填充与边框的粗糙度

解决ggrough中sf图层填充与边框粗糙度独立设置的问题

方案一:叠加图层实现分离控制

这是最直接的可行方案,通过两个独立的geom_sf图层分别处理填充和边框,各自应用不同的粗糙度(或不应用):

  • 先绘制仅包含填充的图层,应用高粗糙度(30)处理
  • 再绘制仅包含边框的图层,应用低粗糙度(如5)或不应用粗糙效果

示例代码:

library(ggplot2)
library(sf)
library(ggrough)

# 加载北卡罗来纳州郡数据
nc <- st_read(system.file("shape/nc.shp", package = "sf"))

# 构建图形
ggplot() +
  # 粗糙填充图层:仅显示填充,隐藏边框
  geom_sf(data = nc, aes(fill = AREA), color = NA) +
  geom_rough(roughness = 30, geom = "sf") +
  # 低粗糙边框图层:仅显示边框,隐藏填充
  geom_sf(data = nc, fill = NA, color = "black", size = 0.5) +
  geom_rough(roughness = 5, geom = "sf") +
  # 可选:调整填充配色
  scale_fill_viridis_c()

如果需要完全平滑的边框,只需去掉第二个图层的geom_rough即可:

ggplot() +
  geom_sf(data = nc, aes(fill = AREA), color = NA) +
  geom_rough(roughness = 30, geom = "sf") +
  geom_sf(data = nc, fill = NA, color = "black", size = 0.5) +
  scale_fill_viridis_c()

方案二:修改parse_sf函数实现参数分离

如果你想从底层实现填充与边框的粗糙度独立控制,可以修改自定义的parse_sf函数,让它支持分别接收fill_roughness和color_roughness参数:

parse_sf <- function(data, rough_args) {
  # 处理填充的多边形粗糙度
  fill_rough <- rough_args$fill_roughness %||% rough_args$roughness
  fill_geom <- lapply(data$geometry, function(x) {
    roughsf::roughsf(x, roughness = fill_rough, max_offset = 0.01)
  })
  fill_data <- data
  fill_data$geometry <- st_sfc(fill_geom)
  
  # 处理边框的线粗糙度
  color_rough <- rough_args$color_roughness %||% rough_args$roughness
  color_geom <- lapply(data$geometry, function(x) {
    roughsf::roughsf(st_cast(x, "MULTILINESTRING"), roughness = color_rough, max_offset = 0.005)
  })
  color_data <- data
  color_data$geometry <- st_sfc(color_geom)
  
  list(fill = fill_data, color = color_data)
}

# 调用时指定不同参数
ggplot(nc) +
  geom_sf(aes(fill = AREA), color = "black") +
  geom_rough(fill_roughness = 30, color_roughness = 5, geom = "sf")

为什么之前的双图层尝试失败?

大概率是因为你没有将填充和边框的显示状态分开(比如同时显示了两个图层的填充/边框),或者没有为每个图层单独指定geom_rough的粗糙度参数。确保每个图层只负责一个视觉元素(填充或边框),并对应设置粗糙效果即可。

内容的提问来源于stack exchange,提问作者bill999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:45:16