Почему ggtern не отображает некоторые точки?

Я пытаюсь сделать график из data.frame, который содержит положительные и отрицательные значения, и я не могу построить все точки. Кто-то знает, можно ли адаптировать код, чтобы построить все точки?

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()

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

Теперь строки суммируются в единицу:

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)

Другие вопросы по тегам