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

无法为ggtern绘图添加geom_text:USDA土壤质地三角图问题

解决ggtern绘制USDA土壤质地三角图缺少标签的问题

问题情况

使用ggtern绘制USDA土壤质地三角图时,试图通过geom_text添加质地类别标签,但生成的图未显示标签,同时出现警告信息。

当前生成的图:
当前生成的质地三角图

弹出的警告信息:

Ignoring unknown labels:
• colour : "Textural Class"
• W : "Percent"
Warning message:
Removing Layer 2 ('PositionNudge'), as it is not an approved position (for ternary plots) under the present ggtern package. 

期望的目标图:
期望的质地三角图

原代码如下:

# Load the required libraries
library(ggtern)
library(plyr)
library(grid)

# Load the Data. (Available in ggtern 1.0.3.0 next version)
data(USDA)

# Put tile labels at the midpoint of each tile.
USDA.LAB = ddply(USDA, 'Label', function(df) {
  apply(df[, 1:3], 2, mean)
})

# Tweak
USDA.LAB$Angle = 0
USDA.LAB$Angle[which(USDA.LAB$Label == 'Loamy Sand')] = -35

#Construct the plot without legend.
ggplot(data = USDA, aes(y=Clay, x=Sand, z=Silt)) +
  coord_tern(L="x",T="y",R="z") +
  geom_polygon(aes(fill = Label), 
               alpha = 0.75, size = 0.5, color = 'black') +
  geom_text(data = USDA.LAB,
            aes(label = Label, angle = Angle),
            color = 'black',
            size = 3.5) +
  theme_rgbw() +
  theme_showsecondary() +
  theme_showarrows() +
  custom_percent("Percent") +
  theme(legend.position = "none") + 
  labs(#title = 'USDA Textural Classification Chart',
    fill  = 'Textural Class',
    color = 'Textural Class') +
  theme(text = element_text(family = "serif", size = 15)) + 
  theme(axis.text = element_text(family = "serif"))

问题原因

  1. geom_text未指定三元坐标系的x/y/z映射,ggtern无法识别标签位置,导致标签被移除
  2. custom_percent参数使用错误,ggtern需要为三个轴(L/T/R)分别指定标签,而非单个值
  3. labs中多余的color参数,因为没有对color美学进行映射,导致无效标签警告

修复后的代码

# 加载所需工具包
library(ggtern)
library(plyr)
library(grid)

# 加载USDA土壤质地数据
data(USDA)

# 计算每个质地类别的中心点坐标
USDA.LAB = ddply(USDA, 'Label', function(df) {
  apply(df[, c("Sand", "Clay", "Silt")], 2, mean)
})

# 调整"Loamy Sand"标签的角度,避免遮挡
USDA.LAB$Angle = 0
USDA.LAB$Angle[USDA.LAB$Label == 'Loamy Sand'] = -35

# 绘制带标签的质地三角图
ggtern(data = USDA, aes(x=Sand, y=Clay, z=Silt)) +
  coord_tern(L="x", T="y", R="z") +
  # 绘制质地类别多边形
  geom_polygon(aes(fill = Label), alpha = 0.75, size = 0.5, color = 'black') +
  # 添加类别标签,明确指定三元坐标映射
  geom_text(data = USDA.LAB, aes(x=Sand, y=Clay, z=Silt, label = Label, angle = Angle),
            color = 'black', size = 3.5) +
  # 设置主题样式
  theme_rgbw() +
  theme_showsecondary() +
  theme_showarrows() +
  # 为三个轴设置百分比标签
  custom_percent(L="Percent", T="Percent", R="Percent") +
  # 隐藏图例
  theme(legend.position = "none") + 
  # 设置填充标签
  labs(fill  = '质地类别') +
  # 设置文本字体
  theme(text = element_text(family = "serif", size = 15),
        axis.text = element_text(family = "serif"))

修复说明

  • 给geom_text添加三元坐标映射:明确指定x=Sand, y=Clay, z=Silt,让ggtern正确识别标签的位置,解决标签消失的问题
  • 修正custom_percent参数:为L/T/R三个轴分别设置"Percent"标签,消除"W: Percent"的警告
  • 移除多余的color参数:从labs中删除color = 'Textural Class',消除"colour: Textural Class"的警告
  • 调整初始映射顺序:让ggtern的初始美学映射和coord_tern的L/T/R对应,避免坐标混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 20:37:25