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

如何在ggtern三元图上标注成分均值的百分比及时长信息?

给ggtern三元图的成分均值添加带百分比和时长的标注线

核心步骤说明

  • 先把成分均值的比例转换为时长(按一天24小时计算:时长=比例×24)
  • 用geom_segment绘制从均值点到三个轴的标注线
  • 用annotate或geom_text添加包含百分比和时长的文本标注

代码示例

假设你已经通过epicoda算出成分均值cm(比例形式),先做预处理:

# 示例成分均值(比例,总和为1)
cm <- c(SB = 0.352, Sleep = 0.333, PA = 0.315)
# 转换为时长(小时)
cm_hours <- cm * 24
# 生成标注文本:百分比(时长h)
labels <- sprintf("%.1f%% (%.1fh)", cm*100, cm_hours)
names(labels) <- names(cm)

接着在ggtern绘图代码中集成标注线和文本:

library(ggtern)

# 基础三元图(替换成你已有的散点/图层代码)
ggtern(data = your_raw_data, aes(x = SB, y = Sleep, z = PA)) +
  geom_point(alpha = 0.6, color = "gray50") +
  # 添加成分均值点
  geom_point(aes(x = cm["SB"], y = cm["Sleep"], z = cm["PA"]), 
             color = "#e63946", size = 3, shape = 19) +
  # 绘制到三个轴的虚线标注线
  geom_segment(aes(x = cm["SB"], xend = 1, y = cm["Sleep"], yend = 0, z = cm["PA"], zend = 0),
               color = "#e63946", linetype = "dashed") +
  geom_segment(aes(x = cm["SB"], xend = 0, y = cm["Sleep"], yend = 1, z = cm["PA"], zend = 0),
               color = "#e63946", linetype = "dashed") +
  geom_segment(aes(x = cm["SB"], xend = 0, y = cm["Sleep"], yend = 0, z = cm["PA"], zend = 1),
               color = "#e63946", linetype = "dashed") +
  # 添加轴外侧的标注文本
  annotate("text", x = 1.05, y = 0, z = 0, label = labels["SB"], color = "#e63946", hjust = 0) +
  annotate("text", x = 0, y = 1.05, z = 0, label = labels["Sleep"], color = "#e63946", vjust = 1) +
  annotate("text", x = 0, y = 0, z = 1.05, label = labels["PA"], color = "#e63946", hjust = 1) +
  # 调整主题和轴标签
  theme_bw() +
  labs(x = "久坐行为(SB)", y = "睡眠(Sleep)", z = "体力活动(PA)")

细节调整提示

  • 标注线的终点对应三元轴的端点:SB轴端点是(1,0,0)、Sleep轴是(0,1,0)、PA轴是(0,0,1)
  • 文本位置的偏移量(比如1.05)可以根据你的图大小微调,避免和散点或轴标签重叠
  • 若需要更美观的排版,可给文本添加size、face参数调整样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:52:25