inst/doc/pirateplot.R

## ----echo = F, message = F, result = 'hide'-----------------------------------
library(yarrr)

## ----fig.width = 6, fig.height = 5, echo = F, fig.align='center'--------------
pirateplot(
  formula = weight ~ Diet,
  data = ChickWeight,
  theme = 1,
  back.col = "white",
  gl.col = "white",
  bean.f.o = c(0, .1, .7, .1),
  #   bean.b.o = c(0, .1, 1, .1),
  point.o = c(.4, .1, .1, .1),
  avg.line.o = c(.3, 1, .3, .3),
  inf.f.o = c(.1, .1, .1, .9),
  bar.f.o = c(.1, .8, .1, .1),
  inf.f.col = c("white", "white", "white", piratepal("xmen")[4]),
  main = "4 Elements of a pirateplot",
  pal = "xmen"
)


text(.7, 350, labels = "Points")
text(.7, 345, labels = "Raw Data", pos = 1, cex = .8)
arrows(.7, 310, .97, 270, length = .1)

text(1.4, 200, labels = "Bar/Line")
text(1.4, 200, labels = "Center", pos = 1, cex = .8)
arrows(1.4, 170, 1.54, 125, length = .1)

text(2.4, 250, labels = "Bean")
text(2.4, 250, labels = "Density", pos = 1, cex = .8)
arrows(2.4, 220, 2.85, 200, length = .1)

text(3.55, 300, labels = "Band")
text(3.55, 290, labels = "Inference\n95% HDI or CI", pos = 1, cex = .8)

arrows(3.55, 240, 3.8, 150, length = .1)

## ----echo = FALSE-------------------------------------------------------------
pp.elements <- data.frame(
  "Argument" = c("formula", "data", "main", "pal", "theme", "inf"),
  "Description" = c(
    "A formula", "A dataframe",
    "Plot title", "A color palette", "A plotting theme", "Type of inference"
  ),
  "Examples" = c(
    "height ~ sex + eyepatch, weight ~ Time",
    "pirates, ChickWeight",
    "'Pirate heights', 'Chicken Weights",
    "'xmen', 'black'",
    "0, 1, 2",
    "'ci', 'hdi', 'iqr'"
  )
)
knitr::kable(pp.elements, caption = "Main Pirateplot Arguments")

## ----fig.align='center', fig.width = 6, fig.height = 4------------------------
# Theme 1 (the default)
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 1,
  main = "theme = 1"
)

## ----fig.align='center', fig.width = 6, fig.height = 4------------------------
# Theme 2
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 2,
  main = "theme = 2"
)

## ----fig.align='center', fig.width = 6, fig.height = 4------------------------
# Theme 3
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 3,
  main = "theme = 3"
)

## ----fig.align='center', fig.width = 6, fig.height = 4------------------------
# Theme 4
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 4,
  main = "theme = 4"
)

## ----fig.align='center', fig.width = 6, fig.height = 4------------------------
# Default theme
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 0,
  main = "theme = 0\nStart from scratch"
)

## ----fig.width = 6, fig.height = 4, fig.align = "center"----------------------
piratepal("all")

## ----fig.width = 6, fig.height = 4, fig.align = "center"----------------------
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  pal = "pony",
  theme = 1,
  main = "pony color palette"
)

## ----fig.width = 6, fig.height = 4, fig.align = "center"----------------------
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 2,
  pal = "black",
  main = "pal = 'black"
)

## ----echo = FALSE-------------------------------------------------------------
pp.elements <- data.frame(
  "element" = c("points", "beans", "bar", "inf", "avg.line"),
  "color" = c(
    "point.col, point.bg",
    "bean.f.col, bean.b.col",
    "bar.f.col, bar.b.col",
    "inf.f.col, inf.b.col",
    "avg.line.col"
  ),
  "opacity" = c(
    "point.o",
    "bean.f.o, bean.b.o",
    "bar.f.o, bar.b.o",
    "inf.f.o, inf.b.o", "avg.line.o"
  )
)

knitr::kable(pp.elements, caption = "Customising plotting elements")

## ----fig.width = 6, fig.height = 4, fig.align = "center"----------------------
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  theme = 0,
  main = "Fully customized pirateplot",
  pal = "southpark", # southpark color palette
  bean.f.o = .6, # Bean fill
  point.o = .3, # Points
  inf.f.o = .7, # Inference fill
  inf.b.o = .8, # Inference border
  avg.line.o = 1, # Average line
  bar.f.o = .5, # Bar
  inf.f.col = "white", # Inf fill col
  inf.b.col = "black", # Inf border col
  avg.line.col = "black", # avg line col
  bar.f.col = gray(.8), # bar filling color
  point.pch = 21,
  point.bg = "white",
  point.col = "black",
  point.cex = .7
)

## ----fig.width = 6, fig.height = 4, fig.align = "center"----------------------
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  main = "Adjusting an existing theme",
  theme = 2, # Start with theme 2
  inf.f.o = 0, # Turn off inf fill
  inf.b.o = 0, # Turn off inf border
  point.o = .2, # Turn up points
  bar.f.o = .5, # Turn up bars
  bean.f.o = .4, # Light bean filling
  bean.b.o = .2, # Light bean border
  avg.line.o = 0, # Turn off average line
  point.col = "black" # Black points
)

## ----fig.width = 6, fig.height = 4, fig.align = "center"----------------------
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  main = "Reducing a pirateplot to a barplot",
  theme = 0, # Start from scratch
  bar.f.o = .7
) # Just turn on the bars

## ----echo = FALSE-------------------------------------------------------------
pp.elements <- data.frame(
  "element" = c("Background color", "Gridlines", "y-axis Locations", "Quantiles", "Average line", "Inference Calculation", "Inference Display"),
  "arguments" = c(
    "back.col",
    "gl.col, gl.lwd, gl.lty", "yaxt.y",
    "quant, quant.lwd, quant.col", "avg.line.fun", "inf.method", "inf.disp"
  ),
  "examples" = c(
    "back.col = 'gray(.9, .9)'",
    "gl.col = 'gray', gl.lwd = c(.75, 0), gl.lty = 1", "yaxt.y = seq(0, 400, 50)",
    "quant = c(.1, .9), quant.lwd = 1, quant.col = 'black'",
    "avg.line.fun = median", "inf.method = 'hdi', inf.method = 'ci'", "inf.disp = 'line', inf.disp = 'bean', inf.disp = 'rect'"
  )
)

knitr::kable(pp.elements, caption = "Additonal pirateplot elements")

## ----fig.width = 8, fig.height = 5, fig.align = "center", out.width = "100%"----
pirateplot(
  formula = weight ~ Time,
  data = ChickWeight,
  main = "Adding quantile lines and background colors",
  theme = 2,
  back.col = gray(.98), # Add light gray background
  gl.col = "gray", # Gray gridlines
  gl.lwd = c(.75, 0), # Gridline widths (alternating)
  inf.f.o = .6, # Turn up inf filling
  inf.disp = "bean", # Wrap inference around bean
  bean.b.o = .4, # Turn down bean borders
  quant = c(.1, .9), # 10th and 90th quantiles
  quant.col = "black", # Black quantile lines
  yaxt.y = seq(0, 400, 50) # Locations of y-axis tick marks
)

## ----fig.width = 10, fig.height = 5, fig.align = "center", out.width = "100%"----
pirateplot(
  formula = height ~ sex + eyepatch,
  data = pirates,
  theme = 2,
  inf.disp = "bean"
)

## ----fig.width = 10, fig.height = 5, fig.align = "center", out.width = "100%"----
# Same as before, but with second IV on different plots by including beside = FALSE
pirateplot(
  formula = height ~ sex + eyepatch,
  data = pirates,
  theme = 2,
  beside = FALSE,
  inf.disp = "bean"
)

## ----fig.width = 10, fig.height = 10, fig.align = "center", out.width = "100%"----
# Same as before, but with second IV on different plots by including beside = FALSE
pirateplot(
  formula = weight ~ Time + Diet,
  data = ChickWeight,
  theme = 2,
  beside = FALSE
)

## ----fig.width = 10, fig.height = 5, fig.align = "center", out.width = "100%"----
pirateplot(
  formula = height ~ sex + eyepatch + headband,
  data = pirates,
  theme = 2,
  inf.disp = "bean"
)

## ----fig.width = 10, fig.height = 7, fig.align = "center"---------------------
times.pp <- pirateplot(
  formula = time ~ sequel + genre,
  data = subset(
    movies,
    genre %in% c("Action", "Adventure", "Comedy", "Horror") &
      rating %in% c("G", "PG", "PG-13", "R") &
      time > 0
  ),
  plot = FALSE
)

## -----------------------------------------------------------------------------
times.pp

## ----eval = FALSE-------------------------------------------------------------
#  # Create a smaller version of the ChickWeight data
#  ChickWeight2 <- ChickWeight[sample(nrow(ChickWeight), size = 100), ]
#  
#  # Define labels, jitter values, and colors for all individual points
#  pointpars <- data.frame(
#    "labels" = 1:100,
#    "jitter" = rep(c(-.1, .1),
#      length.out = 100
#    ),
#    "col" = sample(colors(),
#      size = 100,
#      replace = TRUE
#    )
#  )
#  
#  # Createpireatplot with custom point parameters
#  pirateplot(
#    formula = weight ~ Diet,
#    data = ChickWeight2,
#    pointpars = pointpars,
#    point.o = 1
#  )

Try the yarrr package in your browser

Any scripts or data that you put into this service are public.

yarrr documentation built on Aug. 8, 2025, 7:23 p.m.