如何使用ggtern绘制带分区颜色和类别标注的土壤质地三元图
解决方案
完整可运行代码
# 加载依赖包,未安装的话先执行 install.packages(c("ggtern","dplyr")) library(ggtern) library(dplyr) # 示例数据 area <- c('S1','S2','S3','S4','S5','S6','S7','S8') sand <- c(76.4,56.9,61.7,64.5,71,70.1,60.5,53.7) silt <- c(9.3,23.1,23,17.4,13.5,13.4,21.1,30.6) clay <- c(14.3, 20,15.4,18,15.5,16.6,18.4,15.7) my_data <- data.frame(area,sand,silt,clay) # 绘图 theme_set(theme_bw()) my_data %>% ggtern(aes( x = sand, y = clay, z = silt, color = area # 映射采样分区到点颜色 )) + # 绘制土壤质地分类边界,和plotrix的soil.texture默认USDA分类一致 geom_soiltexture( classification = "USDA", show.legend = FALSE, alpha = 0, # 填充设为完全透明,仅保留边界线 linetype = "solid", color = "gray50" ) + # 绘制土壤质地类别文本标注 geom_soiltexture_text( classification = "USDA", size = 3.5, color = "gray20" ) + geom_point(size = 3.5) + # 调整点大小提升辨识度 labs(color = "采样分区") # 自定义图例标题
对应需求的修改说明
- 不同分区对应不同颜色:仅需在
aes()映射规则中添加color = area,即可自动按采样分区给点分配不同颜色,你也可以通过scale_color_manual(values = c("S1" = "red", "S2" = "blue"...))自定义每个分区的展示颜色,或者调用scale_color_brewer(palette = "Set2")使用预设配色方案。 - 三角形内部带土壤质地类别标注:ggtern内置了USDA土壤质地分类的边界与标注图层,直接调用
geom_soiltexture绘制分类边界、geom_soiltexture_text绘制类别文本即可,分类规则与plotrix包的soil.texture函数默认规则完全一致,你可以调整边界线样式、文本大小、填充透明度等参数适配你的显示需求。
如果运行时提示geom_soiltexture函数不存在,先升级ggtern到最新版本即可:install.packages("ggtern")
内容的提问来源于stack exchange,提问作者geo_dd
相关产品推荐
相关产品推荐

