Как соединить несколько точек стрелкой, опуская ggplot2

#r #scatter-plot #vegan #line-segment

#r #точечный график #веганский #отрезок

Вопрос:

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

Последнее, что я хочу сделать, это соединить точки одной группы (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:

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

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

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

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