Change secondary line axis color

12,854

Update:

Thanks to the comment below, this can be done by using latest dev.v of (Now available in the CRAN version);

install.packages("devtools")
devtools::install_github("tidyverse/ggplot2")
library(ggplot2)

p + theme( axis.line.y.right = element_line(color = "red"), 
       axis.ticks.y.right = element_line(color = "red"))



Maybe there is a straight solution but this is a hack/workaround that I can think of using geom_segment:

p <- ggplot(mtcars, aes(cyl, mpg)) +
     geom_point()

#get the ylim and xlim
xmin <- min(ggplot_build(p)$layout$panel_ranges[[1]]$x.range) 
xmax <- max(ggplot_build(p)$layout$panel_ranges[[1]]$x.range)
ymin <- min(ggplot_build(p)$layout$panel_ranges[[1]]$y.range)
ymax <- max(ggplot_build(p)$layout$panel_ranges[[1]]$y.range)

# Create a simple secondary axis
p + scale_y_continuous(sec.axis = sec_axis(~.+10)) +
    theme(axis.text.y.right = element_text(color = "red"))+
    geom_segment(aes(x=xmax+0.2,xend=xmax+0.2,
                     y=ymin-2,yend=ymax+2), color = "red") +
    coord_cartesian(xlim=c(xmin, xmax), ylim=c(ymin, ymax))

enter image description here

Share:
12,854

Related videos on Youtube

AJMA
Author by

AJMA

Updated on September 14, 2022

Comments

  • AJMA
    AJMA over 1 year

    In ggplot2, how can I modify axis.line.y only on the sec.axis (if possible)?

        p <- ggplot(mtcars, aes(cyl, mpg)) +
          geom_point()
    
        # Create a simple secondary axis
        p + scale_y_continuous(sec.axis = sec_axis(~.+10)) +
          theme(axis.line.y = element_line(color = "red"),
                # I can modify text color but not sure about line?
                axis.text.y.right = element_text(color = "red"))
    

    enter image description here

    As shown in comments below, full control over right axis elements is now comprised in the development version of ggplot2 theme( axis.line.y.right = element_line(color = "red"), axis.ticks.y.right = element_line(color = "red"))

    • M--
      M-- over 6 years
      + geom_segment(aes(x=xmax+0.2,xend=xmax+0.2,y=ymin-2,yend=ymax‌​+2), color = "red") + coord_cartesian(xlim=c(xmin, xmax), ylim=c(ymin, ymax)) this would be a hack. ggplot2 is a bit hard on secondary axis and won't give you that much of flexibility. Because of this: stackoverflow.com/questions/3099219/…
    • aosmith
      aosmith over 6 years
      Based on this closed issue, I think this may be fixed in the development version of ggplot2.
  • user20650
    user20650 over 6 years
    if you update ggplot using github, this feature is no added theme( axis.line.y.right = element_line(color = "red"), axis.ticks.y.right = element_line(color = "red"))
  • Lily Nature
    Lily Nature almost 6 years
    Hello , in this question when i run theme ( axis.line.y.right = element_line(color = "red") it says Error in (function (el, elname) : "axis.ticks.y.right" is not a valid theme element name. Why i am geeting this error, what is solution ?
  • M--
    M-- almost 6 years
    @LilyNature You need to install latest developer version from github. run this: install.packages("devtools");devtools::install_github("tidyv‌​erse/ggplot2");libra‌​ry(ggplot2) and then the code above should work for you.
  • ljh2001
    ljh2001 over 4 years
    @M-- Say we have another variable on the second axis called "V1." How would you change the color of that, without changing the color of other axis titles?
  • M--
    M-- over 4 years
    @ljh2001 use this axis.title.y.right = element_text(colour = "red") within theme(...).
  • tjebo
    tjebo about 3 years
    this should now be possible with the CRAN version :)