Search code examples
rggplot2histogram

How to add a tick mark with characters manually to a histogram?


I want to add a tick mark to the end of the x-axis of a histogram in ggplot. The axis range is from 0 - 55, and I want the last tick mark to be changed to ">55".

set1 %>% 
  ggplot(aes(x=total, fill=lowcost))+
  geom_histogram(binwidth=1,aes(y = (..count..)/sum(..count..)),col=I("black"))+
  scale_color_grey()+scale_fill_grey(start = .85,
                                     end = .85,) +
  theme_linedraw()+
  guides(fill = "none", cols='none')+
  geom_vline(aes(xintercept=10, size='Low target'),
             color="black", linetype=5)+
  geom_vline(aes(xintercept=50, size='High target'),
             color="black", linetype="dotted")+
  scale_size_manual(values = c(.5, 0.5), guide=guide_legend(title = "Target", override.aes = list(linetype=c(3,5), color=c('black', 'black'))))+
  scale_y_continuous(labels=scales::percent)+
  scale_x_continuous(breaks = seq(0,55,10),limits = c(0,60))+
  facet_grid(cols = vars(lowcost))+
  ggtitle("Ask Set 1 ")+
  theme(plot.title = element_text(hjust = 0.5))+
  xlab("Total donation ($)")+
  ylab("Percent")

Solution

  • To show you what @Allan Cameron said in the comments, I created a reproducible dataset. You can use the following code:

    library(tidyverse)
    set1 <- data.frame(total = runif(100, 0, 100),
                       lowcost = rep(LETTERS[1:2], 100))
    
    set1 %>% 
      ggplot(aes(x=total, fill=lowcost))+
      geom_histogram(binwidth=1,aes(y = (..count..)/sum(..count..)),col=I("black"))+
      scale_color_grey()+scale_fill_grey(start = .85,
                                         end = .85,) +
      theme_linedraw()+
      guides(fill = "none", cols='none')+
      geom_vline(aes(xintercept=10, size='Low target'),
                 color="black", linetype=5)+
      geom_vline(aes(xintercept=50, size='High target'),
                 color="black", linetype="dotted")+
      scale_size_manual(values = c(.5, 0.5), guide=guide_legend(title = "Target", override.aes = list(linetype=c(3,5), color=c('black', 'black'))))+
      scale_y_continuous(labels=scales::percent)+
      scale_x_continuous(breaks = c(seq(0,50,10), 55), labels = c(seq(0, 50, 10), '>55'), limits = c(0, 60)) +
      facet_grid(cols = vars(lowcost))+
      ggtitle("Ask Set 1 ")+
      theme(plot.title = element_text(hjust = 0.5))+
      xlab("Total donation ($)")+
      ylab("Percent")
    

    Output:

    enter image description here