ggplot2 - adding secondary y-axis with different b

2020-07-13 09:24发布

问题:

is it possible to manually add breaks and labels to the secondary y-axis using ggplot2?

(see bottom right)

I want more compact breaks on the right y-axis, representing the bars.

回答1:

This graph will be the base case, then I'll show how to change breaks and labels on the secondary y-axis:

sapply(c("pipeR", "ggplot2"), require, character.only = TRUE)

data(swiss)
swiss %>>% ggplot() + 
  geom_bar(mapping = aes(x = Agriculture, y = Fertility * 30 / 400), stat = "identity", colour = gray(0.5), fill = gray(0.5)) + 
  geom_line(mapping = aes(x = Agriculture, y = Education)) + 
  geom_point(mapping = aes(x = Agriculture, y = Education), size = 3, shape = 21, fill = "white") + 
  scale_x_continuous() + 
  scale_y_continuous(
    name = expression("Education"), 
    sec.axis = sec_axis(~ . * 400 / 30 , name = "Fertility"), 
    limits = c(0, 30)) + 
  theme_bw() + 
  theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank()
  )

Change the breaks:

swiss %>>% ggplot() + 
  geom_bar(mapping = aes(x = Agriculture, y = Fertility * 30 / 400), stat = "identity", colour = gray(0.5), fill = gray(0.5)) + 
  geom_line(mapping = aes(x = Agriculture, y = Education)) + 
  geom_point(mapping = aes(x = Agriculture, y = Education), size = 3, shape = 21, fill = "white") + 
  scale_x_continuous() + 
  scale_y_continuous(
    name = expression("Education"), 
    sec.axis = sec_axis(~ . * 400 / 30 , name = "Fertility", breaks = seq(1,1000,10)), 
    limits = c(0, 30)) + 
  theme_bw() + 
  theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank()
  )

Change labels:

swiss %>>% ggplot() + 
  geom_bar(mapping = aes(x = Agriculture, y = Fertility * 30 / 400), stat = "identity", colour = gray(0.5), fill = gray(0.5)) + 
  geom_line(mapping = aes(x = Agriculture, y = Education)) + 
  geom_point(mapping = aes(x = Agriculture, y = Education), size = 3, shape = 21, fill = "white") + 
  scale_x_continuous() + 
  scale_y_continuous(
    name = expression("Education"), 
    sec.axis = sec_axis(~ . * 400 / 30 , name = "Fertility", breaks = seq(1,1000,10), labels=rep("x",length(seq(1,1000,10)))), 
    limits = c(0, 30)) + 
  theme_bw() + 
  theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank()
  )

Useful link: https://whatalnk.github.io/r-tips/ggplot2-secondary-y-axis.nb.html



标签: r ggplot2