使用 ggtern 在三元图上绘制成分均值的坐标

问题描述 投票:0回答:1

我有一组调查久坐行为、睡眠和身体活动的综合数据。每个数据点都是时间的一部分。我想使用

ggtern
将其绘制在三元图上,并按如下方式进行操作,得到以下输出。

library(ggtern)
library(gtools)
library(zCompositions)

comp_df <- as.data.frame(data[,c("id","PA", "SB", "Sleep")])

ggtern(data = comp_df, aes(Sleep, SB, PA)) +
  geom_mask() +
  geom_point() +
  theme_bw() + 
  theme_showarrows() +
  geom_confidence_tern(colour = "black", breaks = c(0.25, 0.5, 0.75)) 

现在这就是大部分的路了。不过,我想添加一个数据点,在三元图上绘制该数据集的组成平均值,并以特定方式标记该平均值的坐标。我使用

GitHub
中的 epicoda 包来识别成分平均值并添加适当的标签,如下所示。

comp_labels <- c("Sleep", "SB", "PA")
library(epicoda)
cm <- comp_mean(comp_df, comp_labels = comp_labels, units = "hr/day")

然后,我可以通过添加另一个

geom_point()
参数轻松地将其添加到我的三元图中,这会产生相同的输出,但具有成分平均值的附加点。

ggtern(data = comp_df, aes(Sleep, SB, PA)) +
  geom_mask() +
  geom_point() +
  geom_point(data = cm) +
  theme_bw() + 
  theme_showarrows() +
  geom_confidence_tern(colour = "black", breaks = c(0.25, 0.5, 0.75)) 

我想要做的是添加线条来用百分比和时间来标记平均值,如下图所示。非常感谢这里的任何帮助。

r ggplot2 ggtern
1个回答
0
投票

不幸的是,您没有提供任何数据,因此此代码未经测试,但

geom_[TLR]line
应该对您有帮助。例如,要标记混合物
20%/20%/60%
,您可以使用:

ggtern(data = comp_df, aes(Sleep, SB, PA)) +
  geom_mask() +
  geom_point() +
  theme_bw() + 
  theme_showarrows() +
  geom_confidence_tern(colour = "black", breaks = c(0.25, 0.5, 0.75)) +
  geom_Tline(Tintercept = .2) +
  geom_Lline(Lintercept = .2) +
  geom_Rline(Rintercept = .6)

也就是说,类似:

geom_Tline(Tintercept = cm$SB) +
  geom_Lline(Lintercept = cm$Sleep) +
  geom_Rline(Rintercept = cm$PA)

应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.