R - ggplot2中的里程碑图

时间:2017-03-22 05:28:48

标签: r ggplot2

我正在尝试在ggplot2中创建一个项目里程碑图表,其中包含几个图层,包括显示活动之间距离的栏,显示活动名称的点和显示活动开始日期的形状。下面是一个图片。

栏中的距离是根据数据中的 DayDiff 字段计算的,该字段是开始日期和结束日期之间的天数差异。

Milestone Chart - Distance in bar is calculated based on day difference

示例数据

df <- structure(list(End = c("5/1/1990", "2/16/1991", "8/31/1991", 
      "12/31/1992"), Start = c("1/1/1990", "6/1/1990", "2/17/1991", 
      "9/1/1991"), Activity = c("First Activity", "Lean period", "Holidays", 
      "Final Phase")), .Names = c("End", "Start", "Activity"), class = 
      "data.frame", row.names = c(NA, -4L))

df$DayDiff <-  as.numeric(as.Date(df$End, format='%m/%d/%Y') - 
               as.Date(df$Start, format='%m/%d/%Y'))

这个图表在ggplot2中是否可行?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我没有尝试使用您创建的DayDiff列,而只是为开始日期创建了一个新列,如下所示。我这样做是为了显示并确保使用的x轴值是Date值。另外我认为DayDiff是没用的,因为所有活动的开始日期都是前一个活动结束后的第二天。

df$DateS_new <- as.Date(df$Start, format = format='%m/%d/%Y')

然后玩ggplot geoms来创造你的身材。以下是用于生成如下图所示的代码

ggplot(df, aes(DateS_new,y=(rep(0.3,4)))) + geom_rect(aes(ymin=0.302, ymax=0.298, xmin=as.Date("1989-11-01"),xmax=as.Date("1991-11-01"))) + geom_point(shape=21,size=10,fill="red") + geom_point(aes(DateS_new,y=rep(0.28,4)),shape=25,size=3) + annotate("text", x=df$DateS_new, y=0.32, label=df$Activity) + scale_x_date(name=NULL,breaks=df$DateS_new, date_labels = "%d-%m-%Y") + theme_bw() + scale_y_continuous(name = NULL) + theme(axis.text.y = element_blank(), axis.ticks.y = element_blank())

Click here for the figure

希望这有帮助。