r - Show only the first instance of a changepoint label in ggplot -
i have data frame
group <- c("pre_analysis","pre_analysis","before","after","after","after","after","after","after","after","after") pdatetime <- c("2016-11-23 06:08:39","2017-02-25 15:31:50","2017-04-06 17:11:57","2017-04-15 01:23:51 cdt", "2017-04-16 15:54:35","2017-04-16 23:48:14","2017-04-18 02:57:41","2017-04-20 05:12:33 cdt", "2017-04-20 14:33:20","2017-04-22 12:33:44","2017-04-23 10:50:49") delta <- c(766.3770,863.8409,893.1615,656.1001,832.9232,912.3867,934.9714,-64.7182,460.3154,949.2538,697.3750) df <- data.frame(group,pdatetime,delta) df$pdatetime <- as.posixct(df$pdatetime,format="%y-%m-%d %h:%m:%s")
i trying create new column "ischangepoint" has value
"cp detected" first changepoint, first index of df$group = "after"
i trying way
df$ischangepoint <- ifelse(df$group == "after", "cp detected", "no")
and getting plot
library(ggplot2) library(ggrepel) ggplot(data = df, aes(pdatetime,delta ))+ ggtitle("changepoint analysis") + theme(axis.text.x = element_text(angle=90, vjust=1),plot.title = element_text(size = rel(1))) + geom_point(aes(colour=df$group), size = 6) + geom_text_repel(aes(pdatetime, delta, label = df$ischangepoint)) + labs(colour="group") + xlab("pdatetime")+ ylab("delta")
this labels indexes after changepoint. how can plot first instance of "cp detected"?
could point me in right direction?
it looks want ischangepoint take on 1 of 3 values:
- group != "after": "no" (edit based on op's comment: should blank too)
- group == "after" & 1st row within group: "cp detected"
- group == "after" & not 1st row within group: "" (blank)
if that's case, following give in dataset:
df <- df %>% arrange(pdatetime) %>% group_by(group) %>% mutate(ischangepoint = row_number() == 1) %>% ungroup() %>% mutate(ischangepoint = ifelse(group == "after" & ischangepoint, "cp detected", ""))
your original ggplot code works me, though think there's no need put df$
in geom_text_repel()
call...
ggplot(data = df, aes(pdatetime,delta ))+ ggtitle("changepoint analysis") + theme(axis.text.x = element_text(angle=90, vjust=1),plot.title = element_text(size = rel(1))) + geom_point(aes(colour=df$group), size = 6) + geom_text_repel(aes(pdatetime, delta, label = ischangepoint)) + labs(colour="group") + xlab("pdatetime")+ ylab("delta")
Comments
Post a Comment