我试了这么久但仍然不知道该怎么做。我有一个数据框:
year <- c(1995:2012)
salary <- c(702, 873, 1061, 1239, 1706, 1923, 2061, 2133, 2201, 2289, 2380, 2477, 2691, 2943, 3102, 3324, 3399, 3521)
miss <- c(0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
df.salary <- data.frame(year, salary, miss)
情节:
ggplot(df.salary, aes(year, salary)) +
geom_line(lwd=1, color="#333333") +
ylim(c(0, 4000)) +
scale_x_continuous(breaks=1995:2012)
变量未命中意味着,两个值(1998年和1999年缺失,仅评估它们)。我想在我的情节中使用缺失年份之间的虚线来指出它。 我希望我的情节看起来像:
我该怎么办?谢谢你的帮助!
答案 0 :(得分:2)
您可以修改data.frame以获得细分标签:
toExtend <- function(x) c(diff(x),0)==1 | c(0,diff(df.salary$miss))==-1
df.salary <- df.salary[rep(1:nrow(df.salary), times=ifelse(toExtend(df.salary$miss), 2, 1)),]
df.salary$miss[toExtend(df.salary$miss)] <- 1
df.salary$seg <- cumsum(c(0, diff(df.salary$miss)!=0))
每次&#34; miss&#34; ingness改变时,这都会上升。您现在可以按此分组,并通过更改您的&#34; aes&#34;添加与缺失相对应的线型。到
aes(year, salary, group=as.factor(seg), lty=as.factor(miss))
您可能希望在data.frame中复制行以将细分扩展到彼此 - 您不清楚是否要向外展开miss=1
部分,miss=0
部分向内,或将每个部分延伸到左侧或右侧,但这样做应该相当简单 - 如果您不知道如何做到这一点,请评估您希望如何缩小差距。