Как соединить несколько точек со стрелкой, опускающей ggplot2 - PullRequest
0 голосов
/ 08 марта 2019

Я сделал порядок временных рядов некоторых данных о растительности, используя пакет vegan. Поскольку диаграммы ординации часто забиты множеством точек данных, я извлек собственные значения первых двух осей ординации и взял среднее значение для каждой группы. Теперь у меня есть только одна точка на сайт (всего 11 сайтов). Чтобы показать некоторые различия, я добавил эллипсы со стандартным отклонением и доверительным интервалом 95%: enter image description here

Последнее, что я хочу сделать, это соединить точки одной и той же группы (A, B или C) стрелкой, указывающей направление изменения во времени. Все движения справа налево.

Изначально я хотел использовать функцию ordiarrow в vegan, но это работает только тогда, когда класс равен decorana. Мой класс factor.

Использование ggplot2 не похоже на допустимую опцию, так как функция ordiellipse (создание эллипсов) там не работает.

код для построения данных:

install.packages("vegan")
library(vegan)
plot(Ord_KIKKER, type = "n", main = "Kikkervalleien",
     xlab = "DCA1 Eigenvalue = 0.62", ylab = "DCA2 Eigenvalue = 0.39")


points(ORD_KIKKER, cex = 2, pch = 19,
       col = c("black", "black", "black", "red","red", "green", "green", "green", "blue", "blue", "blue"))

Получившийся график выглядит несколько иначе, поскольку я разместил здесь уменьшенный набор данных.

Мои данные (Ord_KIKKER):

structure(list(DCA1 = c(2.676616032, 0.361181861, -1.363464067, 
3.176862449, -0.087190269, 2.059548542, 0.167440366, -0.459090096, 
1.571536367, 0.309623788, -0.25787459), DCA2 = c(0.276788721, 
0.422077659, 0.181723453, 0.221610649, 0.940063655, -0.116083905, 
-0.539375059, -0.545053063, -0.06120542, -0.367148924, -1.679257818
), Unique = structure(c(1L, 5L, 8L, 2L, 9L, 3L, 6L, 10L, 4L, 
7L, 11L), .Label = c("2001A", "2001B", "2001C", "2001D", "2008A", 
"2008C", "2008D", "2018A", "2018B", "2018C", "2018D"), class = "factor"), 
    BLOCK = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 
    4L), .Label = c("A", "B", "C", "D"), class = "factor")), .Names = c("DCA1", 
"DCA2", "Unique", "BLOCK"), class = "data.frame", row.names = c("2001A", 
"2008A", "2018A", "2001B", "2018B", "2001C", "2008C", "2018C", 
"2001D", "2008D", "2018D"))

1 Ответ

0 голосов
/ 10 марта 2019

vegan::ordiarrows() сработает, если вы дадите ему только те переменные, которые имеют баллы:

ordiarrows(Ord_KIKKER[,1:2], Ord_KIKKER$BLOCK) # one way

Тем не менее, вы также должны помнить, что на начальном графике должно быть asp=1, чтобы обеспечить равное соотношение сторон к осям.

Я не могу выполнить полное тестирование, потому что график не может быть воспроизведен с данными, которые вы разместили: если вы введете plot(Ord_KIKKER, ...) с фреймом данных, вы не получите обычный график, а график всех переменных на панели ( pairs() сюжет), а также выдает ошибку для type = "n" аргумента. Похоже, что вместо этого вы использовали некоторые нестандартные графические инструменты, и я не уверен, что стандартную R графику vegan::ordiarrows() можно комбинировать с ними.

...