Skip to contents

Overview

MAIDR supports a comprehensive range of plot types from both ggplot2 and Base R. This vignette demonstrates each supported visualization with example code.

Bar Charts

Simple Bar Chart

library(maidr)
library(ggplot2)

# ggplot2
bar_data <- data.frame(
  Category = c("A", "B", "C", "D"),
  Value = c(30, 25, 35, 20)
)

p <- ggplot(bar_data, aes(x = Category, y = Value)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Simple Bar Chart") +
  theme_minimal()

show(p)

# Base R equivalent
barplot(bar_data$Value,
  names.arg = bar_data$Category,
  col = "steelblue",
  main = "Simple Bar Chart"
)
show() # Note: No arguments for Base R plots

Dodged Bar Chart

library(maidr)
library(ggplot2)

# ggplot2
dodged_data <- data.frame(
  Category = rep(c("A", "B", "C"), each = 2),
  Type = rep(c("Type1", "Type2"), 3),
  Value = c(10, 15, 20, 25, 30, 35)
)

p <- ggplot(dodged_data, aes(x = Category, y = Value, fill = Type)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
  labs(title = "Dodged Bar Chart") +
  theme_minimal()

show(p)

# Base R equivalent
matrix_data <- matrix(c(10, 15, 20, 25, 30, 35), nrow = 2)
barplot(matrix_data,
  beside = TRUE, # Creates dodged effect
  names.arg = c("A", "B", "C"),
  col = c("steelblue", "coral"),
  legend = c("Type1", "Type2"),
  main = "Dodged Bar Chart"
)
show()

Stacked Bar Chart

library(maidr)
library(ggplot2)

# ggplot2
stacked_data <- data.frame(
  Category = rep(c("A", "B", "C"), each = 2),
  Type = rep(c("Type1", "Type2"), 3),
  Value = c(10, 15, 20, 25, 30, 35)
)

p <- ggplot(stacked_data, aes(x = Category, y = Value, fill = Type)) +
  geom_bar(stat = "identity", position = position_stack()) +
  labs(title = "Stacked Bar Chart") +
  theme_minimal()

show(p)

# Base R equivalent
matrix_data <- matrix(c(10, 15, 20, 25, 30, 35), nrow = 2)
barplot(matrix_data,
  beside = FALSE, # Creates stacked effect
  names.arg = c("A", "B", "C"),
  col = c("steelblue", "coral"),
  legend = c("Type1", "Type2"),
  main = "Stacked Bar Chart"
)
show()

Histograms

library(maidr)
library(ggplot2)

# ggplot2
hist_data <- data.frame(values = rnorm(1000, mean = 0, sd = 1))

p <- ggplot(hist_data, aes(x = values)) +
  geom_histogram(bins = 30, fill = "skyblue", color = "black") +
  labs(title = "Histogram", x = "Values", y = "Frequency") +
  theme_minimal()

show(p)

# Base R equivalent
hist(rnorm(1000, mean = 0, sd = 1),
  breaks = 30,
  col = "skyblue",
  border = "black",
  main = "Histogram",
  xlab = "Values",
  ylab = "Frequency"
)
show()

Scatter/Point Plots

library(maidr)
library(ggplot2)

# ggplot2
scatter_data <- data.frame(
  x = rnorm(50),
  y = rnorm(50),
  group = sample(c("A", "B", "C"), 50, replace = TRUE)
)

p <- ggplot(scatter_data, aes(x = x, y = y, color = group)) +
  geom_point(size = 3, alpha = 0.7) +
  labs(title = "Scatter Plot") +
  theme_minimal()

show(p)

# Base R equivalent
x <- rnorm(50)
y <- rnorm(50)
plot(x, y,
  pch = 19,
  col = rainbow(3)[as.numeric(factor(sample(c("A", "B", "C"), 50, replace = TRUE)))],
  main = "Scatter Plot"
)
show()

Line Plots

Single Line

library(maidr)
library(ggplot2)

# ggplot2
line_data <- data.frame(
  x = 1:10,
  y = c(2, 4, 1, 5, 3, 7, 6, 8, 9, 4)
)

p <- ggplot(line_data, aes(x = x, y = y)) +
  geom_line(color = "steelblue", linewidth = 1.5) +
  labs(title = "Single Line Plot") +
  theme_minimal()

show(p)

# Base R equivalent
x <- 1:10
y <- c(2, 4, 1, 5, 3, 7, 6, 8, 9, 4)
plot(x, y, type = "l", col = "steelblue", lwd = 2, main = "Single Line Plot")
show()

Multiple Lines

library(maidr)
library(ggplot2)

# ggplot2
multiline_data <- data.frame(
  x = rep(1:10, 3),
  y = c(
    c(2, 4, 1, 5, 3, 7, 6, 8, 9, 4), # Series 1
    c(1, 3, 5, 2, 4, 6, 8, 7, 5, 3), # Series 2
    c(3, 1, 4, 6, 5, 2, 4, 5, 7, 6) # Series 3
  ),
  series = rep(c("A", "B", "C"), each = 10)
)

p <- ggplot(multiline_data, aes(x = x, y = y, color = series)) +
  geom_line(linewidth = 1) +
  labs(title = "Multiline Plot") +
  theme_minimal()

show(p)

# Base R equivalent
x <- 1:10
y1 <- c(2, 4, 1, 5, 3, 7, 6, 8, 9, 4)
y2 <- c(1, 3, 5, 2, 4, 6, 8, 7, 5, 3)
y3 <- c(3, 1, 4, 6, 5, 2, 4, 5, 7, 6)

plot(x, y1, type = "l", col = "red", lwd = 2, main = "Multiline Plot", ylim = c(0, 10))
lines(x, y2, col = "blue", lwd = 2)
lines(x, y3, col = "green", lwd = 2)
show()

Box Plots

library(maidr)
library(ggplot2)

# ggplot2 - Horizontal
p <- ggplot(iris, aes(x = Petal.Length, y = Species)) +
  geom_boxplot(fill = "lightblue", alpha = 0.7) +
  labs(title = "Boxplot - Petal Length by Species") +
  theme_minimal()

show(p)

# ggplot2 - Vertical
p_vert <- ggplot(iris, aes(x = Species, y = Petal.Length)) +
  geom_boxplot(fill = "lightblue", alpha = 0.7) +
  labs(title = "Boxplot - Vertical Orientation") +
  theme_minimal()

show(p_vert)

# Base R equivalent
boxplot(Petal.Length ~ Species,
  data = iris,
  col = "lightblue",
  main = "Boxplot - Petal Length by Species",
  horizontal = TRUE
)
show()

Heatmaps

library(maidr)
library(ggplot2)

# ggplot2
heatmap_data <- data.frame(
  x = rep(c("A", "B"), each = 2),
  y = rep(c("1", "2"), 2),
  z = c(1, 2, 3, 4)
)

p <- ggplot(heatmap_data, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  geom_text(aes(label = z), color = "white", size = 5) +
  labs(title = "Heatmap with Labels") +
  theme_minimal()

show(p)

# Base R equivalent
matrix_data <- matrix(c(1, 2, 3, 4), nrow = 2)
image(matrix_data,
  col = heat.colors(10),
  main = "Heatmap",
  axes = FALSE
)
axis(1, at = seq(0, 1, length.out = 2), labels = c("A", "B"))
axis(2, at = seq(0, 1, length.out = 2), labels = c("1", "2"))
show()

Density/Smooth Plots

library(maidr)
library(ggplot2)

# ggplot2
density_data <- data.frame(values = rnorm(1000, mean = 0, sd = 1))

p <- ggplot(density_data, aes(x = values)) +
  geom_density(fill = "lightblue", alpha = 0.5) +
  labs(title = "Density Plot") +
  theme_minimal()

show(p)

# Base R equivalent
values <- rnorm(1000, mean = 0, sd = 1)
plot(density(values),
  col = "blue",
  lwd = 2,
  main = "Density Plot"
)
polygon(density(values), col = rgb(0.678, 0.847, 0.902, 0.5))
show()

Faceted Plots

library(maidr)
library(ggplot2)

# ggplot2 - Faceted bar plot
facet_data <- data.frame(
  x = rep(1:5, 4),
  y = runif(20, 1, 100),
  group = rep(c("Group 1", "Group 2", "Group 3", "Group 4"), each = 5)
)

p <- ggplot(facet_data, aes(x = x, y = y)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  facet_wrap(~group, ncol = 2) +
  labs(title = "Faceted Bar Plot") +
  theme_minimal()

show(p)

# ggplot2 - facet_grid example
p_grid <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point() +
  facet_grid(cyl ~ gear) +
  labs(title = "Facet Grid: Cylinders vs Gears") +
  theme_minimal()

show(p_grid)

Multi-Panel Layouts

ggplot2 with Patchwork

library(maidr)
library(ggplot2)
library(patchwork)

# Create individual plots
p1 <- ggplot(data.frame(x = 1:10, y = rnorm(10)), aes(x, y)) +
  geom_line(color = "steelblue") +
  labs(title = "Line Plot") +
  theme_minimal()

p2 <- ggplot(data.frame(x = c("A", "B", "C"), y = c(10, 20, 15)), aes(x, y)) +
  geom_bar(stat = "identity", fill = "coral") +
  labs(title = "Bar Plot") +
  theme_minimal()

# Combine with patchwork (side by side)
combined <- p1 + p2
show(combined)

# 2x2 layout
p3 <- ggplot(mtcars, aes(x = mpg)) +
  geom_histogram(fill = "lightgreen", bins = 10) +
  theme_minimal()

p4 <- ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
  geom_boxplot(fill = "lavender") +
  theme_minimal()

combined_2x2 <- (p1 + p2) / (p3 + p4)
show(combined_2x2)

Base R with par(mfrow/mfcol)

library(maidr)

# 2x2 multi-panel layout using par(mfrow)
par(mfrow = c(2, 2))

# Panel 1: Bar plot
barplot(c(10, 20, 15, 25),
  names.arg = c("A", "B", "C", "D"),
  col = "steelblue", main = "Bar Plot"
)

# Panel 2: Histogram
hist(rnorm(100), col = "coral", main = "Histogram")

# Panel 3: Scatter plot
plot(mtcars$wt, mtcars$mpg,
  pch = 19, col = "darkgreen",
  main = "Scatter Plot", xlab = "Weight", ylab = "MPG"
)

# Panel 4: Line plot
x <- 1:10
y <- cumsum(rnorm(10))
plot(x, y, type = "l", col = "purple", lwd = 2, main = "Line Plot")

show()

# Reset to single panel
par(mfrow = c(1, 1))

Multi-Layered Plots

Multi-layered plots combine multiple visualization types in a single plot.

ggplot2 Multi-Layer Examples

library(maidr)
library(ggplot2)

# Histogram with density overlay
p_hist_density <- ggplot(mtcars, aes(x = mpg)) +
  geom_histogram(aes(y = after_stat(density)),
    bins = 15,
    fill = "lightblue", color = "white"
  ) +
  geom_density(color = "red", linewidth = 1.2) +
  labs(title = "Histogram with Density Curve") +
  theme_minimal()

show(p_hist_density)

# Scatter plot with smooth line
p_scatter_smooth <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "steelblue", size = 3) +
  geom_smooth(method = "lm", color = "red", se = TRUE) +
  labs(title = "Scatter Plot with Linear Regression") +
  theme_minimal()

show(p_scatter_smooth)

# Bar plot with line overlay
combo_data <- data.frame(
  month = month.abb[1:6],
  sales = c(100, 120, 90, 150, 130, 160),
  target = c(110, 110, 110, 140, 140, 140)
)

p_bar_line <- ggplot(combo_data, aes(x = month)) +
  geom_bar(aes(y = sales), stat = "identity", fill = "steelblue", alpha = 0.7) +
  geom_line(aes(y = target, group = 1), color = "red", linewidth = 1.5) +
  geom_point(aes(y = target), color = "red", size = 3) +
  labs(title = "Sales vs Target", y = "Value") +
  theme_minimal()

show(p_bar_line)

Base R Multi-Layer Examples

library(maidr)

# Histogram with density curve
hist(mtcars$mpg,
  breaks = 15, freq = FALSE,
  col = "lightblue", border = "white",
  main = "Histogram with Density Curve",
  xlab = "Miles per Gallon"
)
lines(density(mtcars$mpg), col = "red", lwd = 2)
show()

# Scatter plot with regression line
plot(mtcars$wt, mtcars$mpg,
  pch = 19, col = "steelblue",
  main = "Scatter Plot with Regression Line",
  xlab = "Weight", ylab = "MPG"
)
abline(lm(mpg ~ wt, data = mtcars), col = "red", lwd = 2)
show()

# Scatter plot with LOESS smooth
plot(mtcars$wt, mtcars$mpg,
  pch = 19, col = "darkgreen",
  main = "Scatter Plot with LOESS Smooth",
  xlab = "Weight", ylab = "MPG"
)
loess_fit <- loess(mpg ~ wt, data = mtcars)
wt_seq <- seq(min(mtcars$wt), max(mtcars$wt), length.out = 100)
lines(wt_seq, predict(loess_fit, data.frame(wt = wt_seq)),
  col = "red", lwd = 2
)
show()

When to Use Each Plot Type

Plot Type Best For Example Use Case
Bar Chart Comparing categories Sales by product
Histogram Showing distributions Test score frequencies
Scatter Plot Relationships between variables Height vs weight
Line Plot Trends over time/order Stock prices
Box Plot Distribution comparison Salary by department
Heatmap Matrix relationships Correlation matrices
Density Smooth distributions Probability density
Faceted Comparing subgroups Regional sales trends
Multi-Panel Multiple related views Dashboard layouts
Multi-Layered Combining visualizations Histogram + density overlay

Next Steps