我有一个数据框,每个三元组都有 3 个三元轴,如下面的玩具示例
library(ggtern)
library(compositions)
dummy <- data.frame(
t1 = rDirichlet.acomp(100, alpha = c(x=15,y=7,z=3)),
t2 = rDirichlet.acomp(100, alpha = c(x=15,y=7,z=3)),
t3 = rDirichlet.acomp(100, alpha = c(x=15,y=7,z=3)),
t4 = rDirichlet.acomp(100, alpha = c(x=15,y=7,z=3)),
t5 = rDirichlet.acomp(100, alpha = c(x=15,y=7,z=3)),
t6 = rDirichlet.acomp(100, alpha = c(x=15,y=7,z=3))
)
我的目标是为每个三元组(t1、t2、t3 等)获取每 3 列(x、y、z)并使用库绘制它们ggtern::ggtern()
首先我创建这个正则表达式向量:
regex <- paste0('^t', 1:6)
然后循环它并将其结合起来grep
以获取每组 3 列,然后以某种方式绘制它们。
所以在循环的第一次迭代中,我们 grep t1
grep(regex[1], names(dummy), value = TRUE)
这是一个三元组的绘图函数的样子:
ggtern(
data = dummy, mapping = aes(
x = dummy[[1]],
y = dummy[[2]],
z = dummy[[3]]
)) + ggtern_custom() +
Tlab(names(dummy[1])) +
Llab(names(dummy[2])) +
Rlab(names(dummy[3]))
不要担心ggtern_custom()
这是一个帮助函数,可以使情节看起来更好。
最终目标是绘制所有 6 个而不只是 1 并将它们排列在一起(不是手动,而是使用函数/循环)
你能帮我完成这个想法吗?还有其他方法吗?我更喜欢基本的 R 解决方案。