我正在尝试在ggplot2中创建一个项目里程碑图表,其中包含几个图层,包括显示活动之间距离的栏,显示活动名称的点和显示活动开始日期的形状。下面是一个图片。
栏中的距离是根据数据中的 DayDiff 字段计算的,该字段是开始日期和结束日期之间的天数差异。
示例数据
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中是否可行?任何帮助将不胜感激。
答案 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())
希望这有帮助。