How to define y-axis gaps in facet plot using ggplot2?

I need to build data with very different range values. I am using the ggplot2 facet construct with the option facet_grid(variable ~ ., scales = "free") . However, I would like to set the discontinuity values ​​on the y axis, so for all variables the discontinuities are c(0, max(variable)/2, max(variable)) . I tried using scale_y_continuous , but that didn't work.

Playable example:

 v1 <- sample(rnorm(100, 10, 1), 30) v2 <- sample(rnorm(100, 20, 2), 30) v3 <- sample(rnorm(100, 50, 5), 30) fac1 <- factor(rep(rep(c("f1", "f2", "f3"), each = 10), 3)) library(reshape2) library(ggplot2) df1 <- melt(data.frame(fac1, v1, v2, v3)) ggplot(df1, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ ., scales = "free") + theme_bw() 
+5
source share
1 answer

This draws three separate graphs, with y breaks set to 0, 0.5 * max (value) and max (value). The three graphs are combined using the gtable rbind function, then drawn.

 v1 <- sample(rnorm(100, 10, 1), 30) v2 <- sample(rnorm(100, 20, 2), 30) v3 <- sample(rnorm(100, 50, 5), 30) fac1 <- factor(rep(rep(c("f1", "f2", "f3"), each = 10), 3)) library(reshape2) library(ggplot2) library(grid) library(gridExtra) df1 <- melt(data.frame(fac1, v1, v2, v3)) # Draw the three charts, each with a facet strip. # But drop off the bottom margin material dfp1 = subset(df1, variable == "v1") p1 = ggplot(dfp1, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ .) + scale_y_continuous(limits = c(0, ceiling(max(dfp1$value))), breaks = c(0, ceiling(max(dfp1$value))/2, ceiling(max(dfp1$value)))) + theme_bw() g1 = ggplotGrob(p1) pos = g1$layout[grepl("xlab-b|axis-b", g1$layout$name), "t"] g1 = g1[-pos, ] # Drop off the bottom margin material dfp2 = subset(df1, variable == "v2") p2 = ggplot(dfp2, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ .) + scale_y_continuous(limits = c(0, ceiling(max(dfp2$value))), breaks = c(0, ceiling(max(dfp2$value))/2, ceiling(max(dfp2$value)))) + theme_bw() g2 = ggplotGrob(p2) g2 = g2[-pos,] dfp3 = subset(df1, variable == "v3") p3 = ggplot(dfp3, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ .) + scale_y_continuous(limits = c(0, ceiling(max(dfp3$value))), breaks = c(0, ceiling(max(dfp3$value))/2, ceiling(max(dfp3$value)))) + theme_bw() g3 = ggplotGrob(p3) # Combine the three gtables g = rbind.gtable(g1, g2, size = "max") g = rbind.gtable(g, g3, size = "max") # Draw the plot grid.newpage() grid.draw(g) 

enter image description here

+1
source

Source: https://habr.com/ru/post/1243945/


All Articles