Это не симпатичное решение, но это то, что вы ищете?
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
. Теперь вы можете редактировать данные и график далее, то есть раскрасить точки, исключить только точки, которые связаны с вехами, вставить линии к этим точкам, создать разные высоты для текста и т. Д. Надеюсь, это поможет перейти отсюда.