Librería

ggwordcloud

Autor principal

Erwan Le Pennec

Datos de muestra

Para crear un word cloud con ggwordcloud tendrás que tener al menos un data frame con las palabras y opcionalmente una columna numérica que se utilizará para escalar el texto. En este tutorial vamos a utilizar el conjunto de datos thankyou_words_small de la librería con fines ilustrativos.

# install.packages("ggwordcloud")
library(ggwordcloud)

df <- thankyou_words_small

Word cloud con ggwordcloud

Word cloud básico

ggwordcloud proporciona un geom de ggplot2 llamado geom_text_wordcloud para crear word clouds. Utiliza tu data frame y pasa la columna que contiene los textos al argumento label de aes y usa la función geom_text_wordcloud. Ten en cuenta que estamos fijando una semilla para mantener el ejemplo reproducible, ya que el algoritmo detrás del posicionamiento de los textos tiene cierta aleatoriedad.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word)) +
  geom_text_wordcloud() +
  theme_minimal()

Word cloud básico en ggplot2

Tamaño de los textos en base a una variable

Hasta ahora todas las palabras tenían el mismo tamaño. Si quieres establecer el tamaño de fuente en base a una variable numérica puedes pasarla al argumento size de aes.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud() +
  theme_minimal()

El paquete ggwordcloud en R

Word cloud con sintaxis de R base

Alternativamente a lo anterior podrías utilizar la función ggwordcloud y especificar las palabras y la frecuencia (que determinará el tamaño relativo de cada texto) para crear una nube de palabras con una única función. Ten en cuenta que esta función proporciona más argumentos que puedes personalizar.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggwordcloud(words = df$word, freq = df$speakers)

Word cloud en ggplot2 con ggwordcloud

Escala (tamaño de fuente)

El escalado de la fuente por defecto de ggplot2 hace que la nube de palabras se vea pequeña con respecto al área total del gráfico. Es por ello que podrías utilizar la función scale_size_area de la siguiente manera para obtener un mejor control del tamaño de la fuente.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud() +
  scale_size_area(max_size = 20) +
  theme_minimal()

Cambia la escala de los texto de una nube de palabras en R

Eliminar los textos que sobresalen

Si tienes demasiadas palabras y un tamaño de fuente grande puedes etablecer el argumento rm_outside de la función geom_text_wordcloud como TRUE o reducir el tamaño de la fuente.

# install.packages("ggwordcloud")
library(ggwordcloud)
# install.packages("ggforce")
library(ggforce)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud(rm_outside = TRUE) +
  scale_size_area(max_size = 60) +
  theme_minimal()

Eliminar palabras que sobresalen del wordcloud en R

Rotación de textos

Ten en cuenta que también puedes rotar los textos con el argumento angle de aes. En el siguiente ejemplo estamos creando una nueva columna de manera aleatoria para representar los ángulos en los que rotar cada texto.

# install.packages("ggwordcloud")
library(ggwordcloud)

set.seed(1)

# Datos
df <- thankyou_words_small
df$angle <- sample(c(0, 45, 60, 90, 120, 180), nrow(df), replace = TRUE)

ggplot(df, aes(label = word, size = speakers, angle = angle)) +
  geom_text_wordcloud() +
  scale_size_area(max_size = 20) +
  theme_minimal()

Rotar los textos de un word cloud en ggplot2

Forma del word cloud

Por defecto, la forma de un word cloud es circular. Sin embargo, es posible cambiar la forma de la nube con el argumento shape de la función geom_text_wordcloud. Las posibles opciones se llaman "circle" (por defecto), "cardioid", "diamond", "pentagon", "star", "square", "triangle-forward" y "triangle-upright". En los siguientes bloques de código puedes ver un par de ejemplos.

Cambiar la forma de un word cloud en ggplot2

Forma de diamante

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud(shape = "diamond") +
  scale_size_area(max_size = 20) +
  theme_minimal()

Word cloud shape in R

Forma de estrella

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud(shape = "star") +
  scale_size_area(max_size = 20) +
  theme_minimal()

Usar una máscara

Otra opción para generar una forma es utilizar una imagen PNG para crear una máscara en la que mostrar las palabras. Ten en cuenta que se utilizarán los píxeles no transparentes de la imagen como máscara. En el siguiente ejemplo estamos utilizando una imagen PNG de muestra de la librería ggwordcloud con la forma de un corazón para crear la máscara.

Usando una máscara para cambiar la forma de un word cloud en R

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

# Máscara
mask_png <- png::readPNG(system.file("extdata/hearth.png",
      package = "ggwordcloud", mustWork = TRUE))

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud(mask = mask_png) +
  scale_size_area(max_size = 20) +
  theme_minimal()

Color de los textos

Color único

Cuando se crea una nube de palabras con ggwordcloud el color de los textos es negro. Sin embargo, puedes personalizar el color pasando un color al argumento color de geom_text_wordcloud.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers)) +
  geom_text_wordcloud(color = "red") +
  scale_size_area(max_size = 20) +
  scale_color_discrete("red") +
  theme_minimal()

Cambiar el color de un word cloud en ggwordcloud

Color en base a una variable

También puedes establecer el color en base a una variable categórica. Esto te permitirá colorear los textos por grupos o establecer un color diferente para cada texto, como en el ejemplo siguiente.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers, color = name)) +
  geom_text_wordcloud() +
  scale_size_area(max_size = 20) +
  theme_minimal()

Wordcloud en ggplot2 con varios colores

Degradado

Por último, si quieres crear un degradado puedes pasar una variable numérica al argumento color de aes y utilizar una escala de color como scale_color_gradient y especificar los colores del mismo.

# install.packages("ggwordcloud")
library(ggwordcloud)

# Datos
df <- thankyou_words_small

set.seed(1)
ggplot(df, aes(label = word, size = speakers, color = speakers)) +
  geom_text_wordcloud() +
  scale_size_area(max_size = 20) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")

Word cloud con color degradado en R

También te puede interesar