gggap

Streamlined Creation of Segments on the Y-Axis of 'ggplot2' Plots


Keywords
ggplot2, plotting-in-r, r
License
GPL-3.0

Documentation

gggap

Easily create segments in the y-axis of a 'ggplot2' plot.

This project builds on top of gg.gap v1.4 by Jiacheng Lou, et al.

What changed with respect to upstream?

  • Improved handling of subtitles and captions. These were duplicated and placed in the gap between the new segments of the plot.
  • Legends are now supported by the core functionality.
  • The code was heavily refactored following the tidyverse style guide and Clean Code principles.
  • The project has a new name after lossing the punctuation mark from the former name as per the recommendations of the style guide.

CRAN RStudio mirror downloads

Installation

You can install gggap from CRAN:

install.packages("gggap")

A development version can be retrieved from Github:

# install.packages("devtools")
devtools::install_github("cmoralesmx/gggap", ref="dev")

How to use gggap

data(mtcars)
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = gear, fill = gear)) +
  geom_bar() +
  ggtitle("Number of Cars by Gears") +
  xlab("Gears")

# single segments and missing `tick_width`
gggap(plot = p, segments = c(5, 10), ylim = c(0, 50))

# `tick_width` can be one or more numbers
gggap(
  plot = p,
  segments = c(5, 10),
  tick_width = c(1, 10),
  ylim = c(0, 50)
)

# segments list cantains more than one number vectors
gggap(
  plot = p,
  segments = list(c(2.5, 4),c(5, 10)),
  tick_width = c(1, 0.5, 10),
  ylim = c(0, 50))

# `rel_heights` can set the relative height for segments and segmented y-axis
gggap(
  plot = p,
  segments = list(c(2.5, 4),c(5, 10)),
  tick_width = c(1, 0.5, 10),
  rel_heights = c(0.2, 0, 0.2, 0,1),
  ylim = c(0, 50)
)

# reversed y-axis
p <- ggplot(
  data = mtcars,
  aes(x = gear, fill = gear)
) +
geom_bar() +
ggtitle("Number of Cars by Gears") +
xlab("Gears")+
scale_y_continuous(trans = 'reverse')
# single segments and missing tick_width
gggap(plot = p, segments = c(10, 5), ylim = c(15, 0))

# for facet()
library(ggplot2)
p <- ggplot(mtcars, aes(mpg, hp)) + geom_point()
p1 <- p + facet_wrap(~cyl, scales = "free")
gggap(plot = p1, ylim = c(60, 200), segments = c(100, 120))