如何在内布拉斯加州郡级地图用图案替代颜色并优化线条样式?
问题
我希望使用条纹等图案区分内布拉斯加州的各个郡,而非颜色。以下代码可运行,但无法得到美观简洁的线条,线条总是显示为带边框的粗线,十分难看。我该如何设置出不同角度、包含虚实样式的简洁线条?ggpattern包的文档对我来说难以理解。
ggplot(ne_counties_dataframe) + geom_sf(data = ne_counties_dataframe, color = 'black', lwd = 0.5) + geom_sf_pattern(aes(pattern = Both, pattern_color = 'white', pattern_fill = Both, pattern_density = 0.1))
其中“Both”是包含'Both'、'Neither'、'Low_Income'三个因子的列,我希望按该列区分图案。
解决方案
要实现不同角度、虚实结合的简洁条纹图案,可通过以下参数调整优化geom_sf_pattern的效果:
- 指定纯条纹图案:用
pattern = 'stripe'统一使用条纹样式,避免默认的复杂带边框图案 - 自定义条纹角度:通过
pattern_angle映射到Both列,给每个类别分配独特角度 - 控制线条粗细:用
pattern_lwd设置细线条,解决粗线问题 - 虚实线条区分:用
pattern_linetype映射到Both列,给不同类别设置虚实线 - 调整条纹密度与间距:配合
pattern_density和pattern_spacing让条纹分布均匀
调整后的代码示例:
library(ggplot2) library(ggpattern) library(sf) # 为每个因子类别设置对应参数映射 angle_map <- c(Both = 45, Neither = 0, Low_Income = 90) linetype_map <- c(Both = "solid", Neither = "dashed", Low_Income = "dotted") ggplot(ne_counties_dataframe) + # 绘制基础郡边界 geom_sf(color = 'black', lwd = 0.5) + # 添加条纹图案层 geom_sf_pattern( aes( pattern = Both, pattern_angle = Both, pattern_linetype = Both ), pattern = 'stripe', # 指定为纯条纹图案 pattern_color = 'black', # 条纹用黑色提升清晰度 pattern_fill = 'white', # 填充色设为白色突出条纹 pattern_density = 0.2, # 调整密度让条纹更明显 pattern_lwd = 0.3, # 设置细线条 pattern_spacing = 0.05 # 控制条纹间距 ) + # 手动绑定角度和线型的映射关系 scale_pattern_angle_manual(values = angle_map) + scale_pattern_linetype_manual(values = linetype_map)
参数说明:
pattern = 'stripe':强制使用无额外边框的纯条纹,解决原代码的粗边框问题scale_pattern_angle_manual:给不同类别分配45°、0°、90°等差异化角度,直观区分郡的类别scale_pattern_linetype_manual:用实线、虚线、点线进一步增强类别辨识度pattern_lwd = 0.3:将线条调至合适粗细,保证图案简洁美观pattern_density和pattern_spacing:配合调整让条纹分布均匀,避免过于密集或稀疏
内容的提问来源于stack exchange,提问作者user8229029
相关产品推荐
相关产品推荐

