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
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()
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()
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)
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()
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()
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()
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.
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()
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.
# 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 ú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()
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()
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")
También te puede interesar