R ggplot2: Labelling a horizontal line on the y axis with a numeric value

前端 未结 4 1525
春和景丽
春和景丽 2020-12-05 02:12

I have a horizontal line in a ggplot and I would like to label it\'s value (7.1) on the y axis.

library(ggplot2)
df <- data.frame(y=c(1:10),x=c(1:10))
h &         


        
相关标签:
4条回答
  • 2020-12-05 02:50

    This is a follow-up to Prradep's answer.

    I think Prradep's answer works for an older version of ggplot2. I'm using ggplot2 version 3.1.0 and in order to extract the existing labels of plot1 in that version you have to use:

    ggplot_build(plot1)$layout$panel_params[[1]]$y.major
    

    This only works for LINEAR AXES! If you have a non-linear y-axis (for example logarithmic), then ggplot2 stores where tick marks would be if the axis were linear in $y.major. The actual tick mark labels are stored as a character vector in $y.labels. Therefore, for a non-linear y-axis you need to use:

    as.numeric(ggplot_build(cl.plot.log)$layout$panel_params[[1]]$y.labels)
    
    0 讨论(0)
  • 2020-12-05 02:51

    It's not clear if you want 7.1 to be part of the y-axis, or if you just want a way to label the line. Assuming the former, you can use scale_y_continuous() to define your own breaks. Something like this may do what you want (will need some fiddling most likely):

    plot1+ geom_hline(aes(yintercept=h)) + 
      scale_y_continuous(breaks = sort(c(seq(min(df$y), max(df$y), length.out=5), h)))
    

    enter image description here

    Assuming the latter, this is probably more what you want:

    plot1 + geom_hline(aes(yintercept=h)) +
      geom_text(aes(0,h,label = h, vjust = -1))
    

    enter image description here

    0 讨论(0)
  • 2020-12-05 02:53

    Similar to Chase's solution with a change of using the existing labels.


    ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source can be used to extract the exisitng labels and add new ones h.

    plot1 + geom_hline(aes(yintercept=h)) + 
      scale_y_continuous(breaks = sort(c(ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source, h)))
    

    0 讨论(0)
  • 2020-12-05 03:07

    How about something like this?

    plot1 + geom_hline(aes(yintercept=h), colour="#BB0000", linetype="dashed") + 
     geom_text(aes( 0, h, label = h, vjust = -1), size = 3)
    
    0 讨论(0)
提交回复
热议问题