Search code examples
rggplot2geom-barfacet-wrapgeom-text

label datapoints when using geom_jitter overlaying on a box plot


I'm overlaying data points on a box plot. The problem I'm encountering is when trying to label the data points, the labels are not displayed over the data point. Any help here is appreciated. Thanks

df <- data.frame(sno= c(1:10), A =sample(1:1000, 10), B=sample(1:100, 10), C=sample(1:300, 10))
df <- melt(df, id.vars = "sno")

library(ggplot2)
ggplot(df, aes(x="", y=value, label=sno)) + 
    facet_wrap(~variable, scales = "free") +
    geom_boxplot()+
    geom_jitter(position=position_jitter(0.2), col="blue") +
    geom_text(aes(label=sno))

Solution

  • You can use jitter from base to make your own dataset and then use that in geom_point. Using this approach you can assign your x for geom_label so points and labels are aligned.

    df <- data.frame(sno= c(1:10), A =sample(1:1000, 10), 
                                   B=sample(1:100, 10), C=sample(1:300, 10))
    df <- reshape2::melt(df, id.vars = "sno")
    
    dfj <- df
    dfj$xj <- jitter(as.numeric(factor(df$variable)))
    
    library(ggplot2)
    
    ggplot(df, aes(x=as.numeric(variable), y=value, group=NULL)) + 
      facet_wrap(~variable, scales = "free") +
      geom_boxplot()+
      geom_point(data = dfj, aes(x=xj), col="blue") +
      geom_text(data = dfj, aes(x=xj,label=sno, hjust=2)) + 
      scale_x_continuous(breaks = as.numeric(df$variable))+
      theme(axis.title.x=element_blank(),
            axis.text.x=element_blank(),
            axis.ticks.x=element_blank())
    #> Warning: Continuous x aesthetic -- did you forget aes(group=...)?