按时间顺序排列的时间轴和格式日期

o.o*_*o.o 5 plot timeline r date-formatting

我是R和ggplot2的新手,我想知道如何使用R在给定时间生成时间线绘图点?我的日期也有些麻烦.(我不确定我是否应该将此作为两个问题发布,但是这里有).

我有一个数据框,其中年份和月份为YYYYMM格式的字符,两个人的名字和发生的事件.

像这样:

> data

YearMonth   Person1   Person2    Event
200606       Alice      Bob      event1
200606       Bob        Alice    event2
200608       Alice      Bob      event3
200701       Alice      Bob      event3
200703       Bob        Alice    event2
200605       Alice      Bob      event4
Run Code Online (Sandbox Code Playgroud)

日期最初是整数,我使用它转换为字符as.character().我想将其转换为格式化日期.我使用as.Date()并尝试了不同的方式来格式化日期.我最接近的是data$YearMonth <- as.Date(data$YearMonth,"%Y"),但这分别让所有2006xx和2007xx行的'2006-12-20'和'2007-12-20'.有没有办法做到这一点,以便我得到像'YYYY-MM'或'YYYY/MM'的东西?

我也尝试过data$YearMonth <- strptime(data$YarMonth, "%Y%m"),但那给了我<NA>价值.

但我的主要问题是时间表.

下图是我想要的格式:

http://www.vertex42.com/ExcelArticles/Images/timeline/Timeline-for-Benjamin-Franklin.gif

但x轴显示月份和年份(如2006-06,2006-07 ... 2007-06),以及标有Event,Person1和Person2的轴线.

我查看了'timeline'包,?timeline但是我的数据框没有时间段的数据(开始和结束日期).我只是有一个时间点(YearMonth).

我还尝试使用ggplot2 在ggplot2绘制一个按时间顺序排列的时间轴.但是我没有y轴的位错,我希望事件线离开x轴.

注意:这是一个非常简化的示例,因为我在2006年6月到2007年6月期间有大约一千行.是否可以使用这么多数据制作时间轴?

任何帮助深表感谢.谢谢你的时间!

the*_*ail 8

这是另一个尝试:

df$YM <- as.Date(paste0("01",df$YearMonth), format="%d%Y%m")
rangeYM <- range(df$YM)

plot(NA,ylim=c(-1,1),xlim=rangeYM,ann=FALSE,axes=FALSE)
abline(h=0,lwd=2,col="#5B7FA3")

ypts <- rep_len(c(-1,1), length.out=nrow(df))
txtpts <- rep_len(c(1,3), length.out=nrow(df))
segments(df$YM,0,df$YM,ypts,col="gray80")

axis.Date(
 1,
 at=seq.Date(rangeYM[1],rangeYM[2],by="month"),
 format="%Y-%m",
 cex.axis=0.6,
 pos=0,
 lwd=0,
 lwd.tick=2,
 col="#5B7FA3",
 font=2
)

points(df$YM,y=ypts, pch="-", cex=1.5, col="#5B7FA3")
par(xpd=NA)
text(
  df$YM, y=ypts,
  labels=paste(df$Person1,df$Person2,df$Event,sep="\n"), cex=0.7, pos=txtpts
)
par(xpd=FALSE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述