Использование geom_path с датами POSIxct для отображения траекторий с течением времени с помощью ggplot2 - PullRequest
1 голос
/ 18 мая 2019

Данные:

segs3 <- structure(list(Date = structure(c(-62132918400, -62132918400, 
-62130499200, -62130499200, -62127820800, -62127820800, -62125228800, 
-62125228800, -62122550400, -62122550400, -62119958400, -62119958400, 
-62117280000, -62117280000, -62114601600, -62114601600, -62109331200, 
-62109331200, -62101382400, -62101382400, -62098963200, -62098963200, 
-62096284800, -62096284800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Treatment = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L
    ), .Label = c("C", "T"), class = "factor"), cnmds1 = c(0.122961387545896, 
    0.057723977749837, 0.0300104088908616, -0.118427545586108, 
    0.232026011148594, 0.061587021296356, 0.385479649737433, 
    0.267544139583421, 0.221988530422909, -0.168855202757955, 
    0.0218318501737484, -0.231525498248828, 0.0160832637091355, 
    -0.186803075595128, -0.232613714047829, 0.0542629633219799, 
    -0.323422838323045, -0.213851711018165, -0.197755466321406, 
    -0.393692512349716, -0.0303311351612405, -0.015555599329904, 
    0.200994688464486, 0.263319025771876), cnmds2 = c(-0.206573078387224, 
    -0.0346956232380443, -0.0893959448563002, -0.0568011465358581, 
    -0.400917607471187, -0.632254641240973, -0.383454531095861, 
    -0.469614303049956, -0.215133320979806, -0.00834400437557489, 
    0.328182347160583, -0.0129823011324431, 0.350385587009896, 
    0.181878132786698, 0.667044860227797, 0.537754618186533, 
    0.327038282579616, 0.296924472706564, 0.54629597438437, 0.155846821010448, 
    -0.051982526318337, -0.075259505247973, -0.3519049986887, 
    -0.21313698658074)), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -24L), groups = structure(list(
    `Date1[, 3]` = structure(c(-62132918400, -62130499200, -62127820800, 
    -62125228800, -62122550400, -62119958400, -62117280000, -62114601600, 
    -62109331200, -62101382400, -62098963200, -62096284800), class = c("POSIXct", 
    "POSIXt"), tzone = "UTC"), .rows = list(1:2, 3:4, 5:6, 7:8, 
        9:10, 11:12, 13:14, 15:16, 17:18, 19:20, 21:22, 23:24)), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))

Итак, я пытаюсь построить траекторию, основанную на времени, используя некоторые точки из анализа NMDS от двух разных обработок. По сути, я хочу показать, что лечение C имеет хороший круговой паттерн со временем по сравнению с лечением T, которого на самом деле нет: What I'm trying to plot

Однако я не смог понять, как это сделать. Пока мой код выглядит так:

ggplot(segs3, aes( x = cnmds1, y = cnmds2)) +
  geom_point(size = 4) + 
  geom_path(aes(color = as.numeric(Date))) +
  geom_line(arrow = arrow()) +
  facet_wrap(~Treatment) + 
  coord_fixed() 

Я хотел, чтобы точки были разных цветов в зависимости от обработки, хотя они были огранены, но мне пришлось отказаться от этого, чтобы преобразовать дату в число. Однако сюжет все еще не показывает траекторию в правильном порядке времени. Это может быть потому, что даты охватывают два года.

Так что в конечном итоге мой вопрос. Как я могу заставить линии траектории следовать точкам в правильной последовательности дат, а также, возможно, раскрасить эту линию в соответствии с градиентом времени?

Любая помощь будет высоко ценится!

1 Ответ

2 голосов
/ 18 мая 2019

Здесь есть две проблемы: 1) geom_path отображает данные в порядке их появления во фрейме данных, поэтому их необходимо отсортировать в хронологическом порядке, а 2) seg3 сгруппированы по дате, поэтому их будет сложно отсортировать по Дата в целом, пока вы не разгруппируете.

library(dplyr)
segs3 %>% 
  ungroup() %>%
  arrange(Date) %>%
ggplot(aes( x = cnmds1, y = cnmds2, color = Date)) +
  geom_point(size = 4) + 
  geom_path(arrow = arrow(type = "closed", 
                          length = unit(0.05, "npc"))) +
  facet_wrap(~Treatment) + 
  coord_fixed() 

enter image description here

...