Search code examples
rggplot2axis-labels

R, how to add one break to the default breaks in ggplot?


Suppose I have the following issue: having a set of data, generate a chart indicating how many datapoints are below any given threshold.

This is fairly easy to achieve

n.data <- 215

set.seed(0)
dt <- rnorm(n.data) ** 2
x <- seq(0, 5, by=.2)
y <- sapply(x, function(i) length(which(dt < i)))

ggplot() +
  geom_point(aes(x=x,y=y)) +
  geom_hline(yintercept = n.data)

Output

The question is, suppose I want to add a label to indicate what the total number of observation was (n.data). How do I do that, while maintaining the other breaks as default?

The outcome I'd like looks something like the image below, generated with the code

ggplot() +
  geom_point(aes(x=x,y=y)) +
  geom_hline(yintercept = n.data) +
  scale_y_continuous(breaks = c(seq(0,200,50),n.data))

However, I'd like this to work even when I change the value of n.data, just by adding it to the default breaks. (bonus points if you also get rid of the grid line between the last default break and the n.data one!)

enter image description here


Solution

  • Three years and some more knowledge of ggplot later, here's how I would do this today.

    ggplot() +
      geom_point(aes(x=x,y=y)) +
      geom_hline(yintercept = n.data) +
      scale_y_continuous(breaks = c(pretty(y), n.data))