无法为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"))
问题原因
geom_text未指定三元坐标系的x/y/z映射,ggtern无法识别标签位置,导致标签被移除custom_percent参数使用错误,ggtern需要为三个轴(L/T/R)分别指定标签,而非单个值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
相关产品推荐
相关产品推荐

