Stem plot (gráfico lollipop o de piruleta) en matplotlib

La función stem

En matplotlib, la función stem permite crear lo que se conoce como gráficos stem, gráficos de piruleta o lollipop charts en Python. Tendrás que pasar tus datos de entrada a la función con la posición y los valores asociados a cada una.

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y)
# plt.show()

Stem plot en Python

Gráfico de piruleta horizontal

Por defecto, los gráficos stem son verticales pero puedes crear gráficos horizontales estableciendo el argumento orientation como "horizontal", tal y como se muestra en el ejemplo siguiente.

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, orientation = "horizontal")
# plt.show()

Gráfico de piruleta en matplotlib

El argumento bottom

Ten en cuenta que la línea base roja se sitúa por defecto en el cero, pero puedes sobrescribir su posición con el argumento bottom.

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, bottom = 60)
# plt.show()

Lollipop chart en Python

Personalización de los gráficos de piruleta

La función stem proporciona tres argumentos para personalizar el gráfico: linefmt para las líneas, markerfmt para los símbolos y basefmt para la línea base.

Color de las líneas

Para cambiar el color de las líneas puedes pasar un nuevo color al argumento linefmt, como se muestra a continuación.

Personalizar el color de las líneas de un stem plot en Python

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, linefmt = 'black')
# plt.show()

Estilo de las líneas

Ten en cuenta que el mismo argumento usado para cambiar el color de las líneas también se puede utilizar para personalizar el estilo o tipo de línea.

Cambiar el estilo de línea de un lollipop chart en Python

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, linefmt = '--')
# plt.show()

Color y tipo de líneas a la vez

Además, el argumento linefmt también permite establecer el color y el tipo de línea a la vez, indicando el color (e.g. k para negro) y el estilo de línea (-- para una línea discontinua).

Establecer el tipo y color de línea de un gráfico stem en Python

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, linefmt = 'k--')
# plt.show()

Forma y color de los marcadores

El argumento markerfmt permite personalizar el color y la forma de los marcadores del gráfico. En el ejemplo siguiente establecemos diamantes (D) rojos (r) como símbolo.

Símbolo personalizado de un lollipop chart de matplotlib

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, markerfmt = 'Dr')
# plt.show()

Personalización de la línea base

El color y estilo de la línea base se puede personalizar de la misma manera que las otras líneas pero utilizando el argumento basefmt. En el siguiente ejemplo establecemos una línea negra punteada.

Personalizar la línea base de un stem plot de Python

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, basefmt = 'k:')
# plt.show()

Gráfico de piruleta por grupo

Por último, vale la pena mencionar que puedes crear gráficos lollipop en Python con varios grupos escribiendo nuevas líneas. Para agregar una leyenda establece la etiqueta con el argumento label y después utiliza la función legend.

import matplotlib.pyplot as plt
import numpy as np

# Datos
x = np.arange(2, 12, 1)
y = x ** 2

x2 = np.arange(2, 12, 1)
y2 = -y

# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, 'b', markerfmt = 'bo', label = "Grupo 1")
ax.stem(x2, y2, 'g', markerfmt = 'go', label = "Grupo 2")
ax.legend()
# plt.show()

Lollipop chart con varios grupos en Python

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar