为什么ggtern不能绘制一些点?

3

我正在尝试从包含正负值的数据框中绘制图形,但无法绘制所有点。有人知道是否可以调整代码以绘制所有点吗?

example = data.frame(X1=c(-1,-0.5,1),X2=c(-1,0.7,1),X3=c(1,-0.5,2))
ggtern(data=example, aes(x=X1,y=X2,z=X3)) + geom_point()

enter image description here


2
我认为你的(样本)数据不符合构建三元图的要求。 - erc
1个回答

3

实际上,您的数据点已被绘制出来,但它们位于绘图区域之外。

首先,为了理解原因,您的每行数据必须总和为1,否则它将被强制这样做,因此您将绘制以下内容:

example = example / matrix(rep(rowSums(example),ncol(example)),nrow(example),ncol(example))
example

        X1        X2        X3
1 1.000000  1.000000 -1.000000
2 1.666667 -2.333333  1.666667
3 0.250000  0.250000  0.500000

现在行总和为1:
print(rowSums(example))
[1] 1 1 1

您的数值为负数,在“组成”方面是没有意义的,但是仍然可以绘制负浓度,因为它们在数值上代表三元图之外的点,让我们扩大限制并进行渲染以查看它们所在的位置:

ggtern(data=example, aes(x=X1,y=X2,z=X3)) + 
  geom_mask() + 
  geom_point() +
  limit_tern(5,5,5)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接