Creating word clouds in python

Wordclouds can be generated with ease in python, using just two libraries:

Word clouds from a string

I shall illustrate this feature using a tongue twister in Spanish. In order to generate our word cloud we have to instantiate a WordCloud object, in our code block called wc, and then generate the word cloud using the generate() method.

from wordcloud import WordCloud
import matplotlib.pyplot as plt

wc = WordCloud(background_color="white", random_state=None)

text = "tres tristes tigres comen trigo en tres tristes platos de trigo" 

wc.generate(text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.savefig(filename)
return filename

wordcloud-string.png

Word clouds from word frequency

In this case, we provide the word frequencies using a dictionary (dict), and the method used to generate the word cloud is generate_from_frequencies().

from wordcloud import WordCloud
import matplotlib.pyplot as plt

wc = WordCloud(background_color="white")
freq = {
    "tres": 2,
    "tristes": 2,
    "tigres": 1,
    "comen": 1,
    "trigo": 1,
    "platos": 1,
    "de": 1,
    "en":1
}

wc.generate_from_frequencies(freq)

plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.savefig(filename)
return filename

wordcloud-frequency.png

Word cloud with a shape

In this last example, I'll use python's logo as mask for our word cloud. Note that the image has to have a white background. For visual impact, I'm using a text extraction from "El Quijote de la Mancha" by Miguel de Cervantes, to generate the cloud.

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

mask = np.array(Image.open('../images/python-logo.jpg'))

wc = WordCloud(background_color="white", max_words=2000, mask=mask, contour_width=3, contour_color='steelblue')
text = """
En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua,
rocín flaco y galgo corredor. Una olla de algo más vaca que carnero,
salpicón las más noches, duelos y quebrantos los sábados, lantejas los
viernes, algún palomino de añadidura los domingos, consumían las tres
partes de su hacienda. El resto della concluían sayo de velarte, calzas de
velludo para las fiestas, con sus pantuflos de lo mesmo, y los días de
entresemana se honraba con su vellorí de lo más fino. Tenía en su casa una
ama que pasaba de los cuarenta, y una sobrina que no llegaba a los veinte,
y un mozo de campo y plaza, que así ensillaba el rocín como tomaba la
podadera. Frisaba la edad de nuestro hidalgo con los cincuenta años; era de
complexión recia, seco de carnes, enjuto de rostro, gran madrugador y amigo
de la caza. Quieren decir que tenía el sobrenombre de Quijada, o Quesada,
que en esto hay alguna diferencia en los autores que deste caso escriben;
aunque, por conjeturas verosímiles, se deja entender que se llamaba
Quejana. Pero esto importa poco a nuestro cuento; basta que en la narración
dél no se salga un punto de la verdad.

Es, pues, de saber que este sobredicho hidalgo, los ratos que estaba
ocioso, que eran los más del año, se daba a leer libros de caballerías, con
tanta afición y gusto, que olvidó casi de todo punto el ejercicio de la
caza, y aun la administración de su hacienda. Y llegó a tanto su curiosidad
y desatino en esto, que vendió muchas hanegas de tierra de sembradura para
comprar libros de caballerías en que leer, y así, llevó a su casa todos
cuantos pudo haber dellos; y de todos, ningunos le parecían tan bien como
los que compuso el famoso Feliciano de Silva, porque la claridad de su
prosa y aquellas entricadas razones suyas le parecían de perlas, y más
cuando llegaba a leer aquellos requiebros y cartas de desafíos, donde en
muchas partes hallaba escrito: La razón de la sinrazón que a mi razón se
hace, de tal manera mi razón enflaquece, que con razón me quejo de la
vuestra fermosura. Y también cuando leía: ...los altos cielos que de
vuestra divinidad divinamente con las estrellas os fortifican, y os hacen
merecedora del merecimiento que merece la vuestra grandeza.

Con estas razones perdía el pobre caballero el juicio, y desvelábase por
entenderlas y desentrañarles el sentido, que no se lo sacara ni las
entendiera el mesmo Aristóteles, si resucitara para sólo ello. No estaba
muy bien con las heridas que don Belianís daba y recebía, porque se
imaginaba que, por grandes maestros que le hubiesen curado, no dejaría de
tener el rostro y todo el cuerpo lleno de cicatrices y señales. Pero, con
todo, alababa en su autor aquel acabar su libro con la promesa de aquella
inacabable aventura, y muchas veces le vino deseo de tomar la pluma y dalle
fin al pie de la letra, como allí se promete; y sin duda alguna lo hiciera,
y aun saliera con ello, si otros mayores y continuos pensamientos no se lo
estorbaran. Tuvo muchas veces competencia con el cura de su lugar —que era
hombre docto, graduado en Sigüenza—, sobre cuál había sido mejor caballero:
Palmerín de Ingalaterra o Amadís de Gaula; mas maese Nicolás, barbero del
mesmo pueblo, decía que ninguno llegaba al Caballero del Febo, y que si
alguno se le podía comparar, era don Galaor, hermano de Amadís de Gaula,
porque tenía muy acomodada condición para todo; que no era caballero
melindroso, ni tan llorón como su hermano, y que en lo de la valentía no le
iba en zaga.
"""

wc.generate(text)
plt.figure(figsize=(10,10) )
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.savefig(filename)
return filename

wordcloud-shape.png

Author: Oscar Castillo-Felisola

Created: 2026-04-02 Thu 14:59