La librería waffle contiene una función del mismo nombre que puede ser usada para crear gráficos de waffle (square pie o gridplots) en ggplot2.
Para crear un gráfico de waffle básico pasa el vector que contiene la cuenta para cada grupo a la función. El número de filas del gráfico puede ser seleccionado con rows (por defecto es 10). Elige un valor en base a tus datos.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
# Vector
x <- c(30, 25, 20, 5)
# Gráfico de waffle
waffle(x, rows = 8)

Usa un vector con nombres para cambiar la leyenda
Si nombras las variables del vector, la leyenda mostrará sus nombres.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
# Vector
x <- c(G1 = 30, G2 = 25, G3 = 20, G4 = 5)
# Gráfico de waffle
waffle(x, rows = 8)

Personalización del color
Puedes pasar un vector de colores al argumento colors. Pasa tantos colores como número de componentes tenga el vector de entrada.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
# Vector
x <- c(G1 = 30, G2 = 25, G3 = 20, G4 = 5)
# Gráfico de waffle
waffle(x, rows = 8,
colors = c("#FFEDA0", "#FEB24C", "#FC4E2A", "#BD0026"))

Posición de la leyenda
La posición de la leyenda se puede cambiar con el argumento legend_pos. Los posibles valores son "right" (por defecto), "bottom", "left", "top" y "none" para eliminar la leyenda.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
# Vector
x <- c(G1 = 30, G2 = 25, G3 = 20, G4 = 5)
# Gráfico de waffle
waffle(x, rows = 8,
legend_pos = "bottom")

En caso de que quieras incrementar el margen del gráfico respecto a la leyenda pasa un valor numérico al argumento pad (por defecto es 0).

El paquete también proporciona una función llamada iron, que puede ser usada para combinar varios gráficos de waffle, como en el siguiente ejemplo.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
w1 <- waffle(c(A = 0, B = 40), rows = 5)
w2 <- waffle(c(A = 10, B = 30), rows = 5)
# Combinar los gráficos
iron(w1, w2)

Ten en cuenta que puedes deshacerte de las categorías no usadas en los gráficos pasando keep = FALSE.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
w1 <- waffle(c(A = 0, B = 40), rows = 5, keep = FALSE)
w2 <- waffle(c(A = 10, B = 30), rows = 5, keep = FALSE)
# Combinar los gráficos, eliminando las etiquetas que no se usan
iron(w1, w2)
geom_waffle
Si prefieres utilizar un geom en lugar de un wrapper el paquete proporciona geom_waffle, que puede ser utilizada tal y como se muestra en el siguiente ejemplo. Ten en cuenta que scale_fill_manual se puede usar para sobrescribir los colores o para personalizar la leyenda.
# install.packages("waffle", repos = "https://cinc.rud.is")
library(waffle)
# Datos
df <- data.frame(grupo = LETTERS[1:3],
valor = c(25, 20, 35))
# Gráfico waffle
ggplot(df, aes(fill = grupo, values = valor)) +
geom_waffle(n_rows = 8, size = 0.33, colour = "white") +
scale_fill_manual(name = NULL,
values = c("#BA182A", "#FF8288", "#FFDBDD"),
labels = c("A", "B", "C")) +
coord_equal() +
theme_void()

También te puede interesar