Создание диаграммы / временной шкалы Ганта в R с использованием только гггг, а не дд-мм-ггг - PullRequest
0 голосов
/ 29 января 2019

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

То, что я хочу, это что-то вроде диаграммы Ганта с названием испытаний на оси у и годами (гггг) по оси х.У меня возникли проблемы, потому что большая часть кода диаграммы Ганта работает с датами, а также не может обработать три элемента, которые мне нужны на диаграмме -

Самый ранний справочник

Последний справочник

Дата публикации

плохо нарисованный пост о том, чего я пытаюсь достичь

Обновление: это близко к тому, что я хочу, и этот код работаеточень хорошо, спасибо.Я рад, что вы сделали это и в ggplot, я привык к этому пакету.

Мне также нужно добавить третий класс (pubdate) на диаграмму, поэтому df равен

df <- structure(list(task = structure(1:3, .Label = c("Trial1", "Trial2", "Trial3"), 
                                  class = "factor"), start_year = c(1980, 2003, 2000),
                 end_year = c(2006, 2013, 2010), pub_date = c(2011, 2015, 2013)), 
            class = "data.frame",
            row.names = c(NA, 3L))

Я бы хотел, чтобы pub_date был отделен от линии start_year <-> end_year на графике.

1 Ответ

0 голосов
/ 29 января 2019

Это воспроизводимый пример того, что вы хотите.Сначала у вас должна быть дата начала и окончания каждой задачи в вашей повестке дня, а различные задачи должны храниться как фактор в вашем фрейме данных следующим образом.функция из пакета tidyr, например.Таким образом, я поместил начальный и конечный годы в один столбец, чтобы было легче построить задание по заливу.

   library(tidyverse)
   df %>% 
      gather(key = "start_end_date)", value = "year", -task, -pub_date) %>%
      ggplot(aes(x = year, y = task, color = task)) +
      geom_line(size = 2) + 
      geom_point(size = 3) + 
      geom_point(aes( x = pub_date), shape = 3, size = 3) +
      scale_x_continuous(breaks = seq(1980, 2016, 6))

enter image description here

...