генерация графика времени в R - PullRequest
0 голосов
/ 02 ноября 2018

Я хотел создать временную шкалу, подобную этой (хотя было бы желательно, чтобы столбцы, а не текст, были разных цветов): http://benalexkeen.com/creating-a-timeline-graphic-using-r-and-ggplot2/

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

id <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1)
content <- c("Refdate","CDate", "Rdate", "Disdate", "Disdate", "Exdate", "Odate",
             "Odate", "Odate", "Odate","Odate", "Odate", "Odate", "Odate")
start<- c("05/07/2011", "24/01/2015", "17/09/2012", "24/11/2014", "6/03/2015",
          "13/07/2011", "5/07/2012", "28/09/2012", "27/02/2014", "24/02/2015",
          "11/03/2015", "17/03/2015", "19/03/2015", "30/03/2015")
df <- data.frame(id, content, start, stringsAsFactors=FALSE)
df$start <- as.Date(df$start, "%d/%m/%Y")

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Если вы хотите изменить порядок точек (в этом примере это делается быстро, но есть некоторые совпадения, что означает, что вам нужно немного изменить порядок вручную или найти хороший алгоритм), тогда ggrepel может быть в состоянии помочь вам:

xdf <- xdf[order(xdf$start, decreasing = TRUE),]

ggplot(xdf, aes(start, 1)) +
  geom_hline(yintercept = 1, linetype="dotted", size=0.25) +
  ggrepel::geom_label_repel(
    aes(label = content), direction = "y", min.segment.length = 0.1
  ) +
  labs(x=NULL, y=NULL) +
  hrbrthemes::theme_ipsum_rc(grid="") +
  theme(axis.text.y=element_blank()) 

enter image description here

0 голосов
/ 02 ноября 2018

Это не симпатичное решение, но это то, что вы ищете?

library(chron)
library(ggplot2)
library(dplyr)

# fill up missing dates in your dataset
dates <- as.Date(min(df$start,na.rm=T):max(df$start,na.rm=T),origin="1970-01-01")
x <- data.frame(id=rep(unique(df$id),each=length(dates)),
                content="",
                start=rep(dates, length(unique(df$id))))
df <- bind_rows(df,x)


# create formatted labels
months_list <- c("January", "February", "March", "April", "May", "June", 
                 "July", "August", "September", "October", "November", "December")
df <- df %>%
  mutate(date_format= factor(paste(months(df$start), years(df$start)),
                         levels=apply(expand.grid(months_list, levels(years(df$start))), 1, paste, collapse=" "))) %>%
  arrange(start) %>%
  # create position
  mutate(ypos = 0.01)

ggplot(df, aes(x=date_format, y=ypos))+
         # remove y-axis
         theme(axis.text.y    = element_blank(),
               axis.title.y   = element_blank(),
               axis.line.y  = element_blank(),
               axis.ticks.y   = element_blank())+
  scale_y_continuous(expand=c(0,0), limits=c(0,1.5))+
  # format x-axis
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))+
  # get milestones
  geom_point(aes(fill=content))+
  # write your text
  geom_text(aes(x=date_format, y=0.5, label=content))

Поскольку я не знал, какой макет вы хотите получить, я создал базовый сюжет. Макет теперь зависит от вас, используя ggplot2. Теперь вы можете редактировать данные и график далее, то есть раскрасить точки, исключить только точки, которые связаны с вехами, вставить линии к этим точкам, создать разные высоты для текста и т. Д. Надеюсь, это поможет перейти отсюда.

...