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") 

enter image description here

this labels indexes after changepoint. how can plot first instance of "cp detected"?

desired plot: enter image description here

could point me in right direction?

it looks want ischangepoint take on 1 of 3 values:

  1. group != "after": "no" (edit based on op's comment: should blank too)
  2. group == "after" & 1st row within group: "cp detected"
  3. 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") 

updated plot


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -