Gráfico de barras en matplotlib

La función bar para crear gráficos de barras en matplotlib

Para crear un gráfico de barras vertical con matplotlib puedes utilizar la función bar, pasando las categorías a x y los valores de cada barra a height.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y)
# plt.show()

Gráfico de barras en matplotlib

Ten en cuenta que en lugar de grupos también puedes pasar un array numérico con las posiciones para las barras.

import matplotlib.pyplot as plt

# Datos
x = [1, 3, 4]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y)
# plt.show()

Diagrama de barras en Python

Etiquetas de las barras

En el escenario anterior también puedes agregar las etiquetas con el argumento tick_label, como en el ejemplo siguiente.

import matplotlib.pyplot as plt

# Datos
x = [1, 3, 4]
y = [3, 5, 1]
etiquetas = ["Grupo 1", "Grupo 2", "Grupo 3"]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, tick_label = etiquetas)
# plt.show()

Etiquetas de los grupos de un bar plot en matplotlib

Grosor de las barras

Por defecto, el grosor de las barras es 0.8. Sin embargo, puedes pasar un número a width para cambiar el grosor de todas las barras o pasar un array especificando el grosor para cada una de las barras, como en el bloque de código siguiente:

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]
grosor = [0.5, 0.3, 1.2]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, width = grosor)
# plt.show()

Grosor de las barras en matplotlib

Alineación de barras

La alineación de las barras respecto a los valores del eje X es "center" por defecto, pero también puedes utilizar align = "edge" para alinear los bordes de las barras a las coordenadas de X.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, align = "edge")
# plt.show()

Alineación de las barras de un bar plot en matplotlib

Coordenadas de inicio de las barras en el eje Y

Las barras empiezan por defecto en Y = 0, pero el argumento bottom permite sobrescribir las coordenadas base para una o cada una de las barras.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, bottom = [2, 3, 0])
# plt.show()

Coordenadas de inicio de las barras en matplotlib

Eje Y en escala logarítmica

Por último, ten en cuenta que es posible dibujar el eje Y en escala logarítimica estableciendo log = True.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, log = True)
# plt.show()

Bar chart en Python con eje Y en escala logarítmica

Gráfico de barras horizontal con barh

La función anterior permite crear diagramas de barras verticales en Python, pero si quieres crear uno horizontal tendrás que utilizar la función barh en lugar de bar. Esta función es muy parecida a la anterior, con pequeños cambios en los argumentos. Por ejemplo, en lugar de utilizar el argumento height tendrás que utilizar width, tal y como se muestra a continuación.

Diagrama de barras horizontal en Python con matplotlib

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.barh(x, width = y)
# plt.show()

Puede que hayas notado que las categorías no se muestran en el orden del array. Sin embargo, puedes invertir el eje Y con invert_yaxis(), de modo que las etiquetas se lean de arriba a abajo.

Gráfico de barras en Python con eje invertido

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.barh(x, width = y)
ax.invert_yaxis()
# plt.show()

Coordenadas de inicio de las barras en el eje X

Al utilizar barh, el argumento equivalente a bottom en bar es left, que permite modificar el inicio de las barras en el eje X.

Inicio de las barras de un bar plot horizontal

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.barh(x, width = y, left = [2, 3, 0])
# plt.show()

Diagrama de barras con barras de error

Tanto bar como barh proporcionan un argumento para agregar barras de error tanto verticales como horizontales llamados yerr y xerr.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]
error = [0.8, 0.4, 0.2]

# Gráfico de barras
fig, ax = plt.subplots()
# Utilizamos yerr porque el gráfico es vertical
# Utiliza xerr cuando uses barh
ax.bar(x = x, height = y, yerr = error)
# plt.show()

Gráfico de barras con barras de error en matplotlib

Ten en cuenta que también puedes agregar las barras horizontales estableciendo un tamaño adecuado con capsize.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]
error = [0.8, 0.4, 0.2]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, yerr = error, capsize = 10)
# plt.show()

Diagrama de barras con barras de error en Python

Por último, también puedes modificar el color de las barras con ecolor y en el siguiente bloque de código las ponemos de color rojo. Utiliza el argumento error_kw para pasar un diccionario con personalizaciones adicionales.

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]
error = [0.8, 0.4, 0.2]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, yerr = error, capsize = 10, ecolor = "r")
# plt.show()

Color de las barras de error en Python

Personalización del color

Color de fondo

El color de fondo azul de las barras que viene por defecto se puede personalizar con el argumento color. Por una parte, puedes pasar un nuevo color al argumento para cambiar el color de todas las barrras a la vez.

Color de fondo de las barras en matplotlib

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, color = "darkseagreen")
# plt.show()

Color de fondo por grupo

Por otra parte, si prefieres establecer un color para cada barra puedes pasar un array al argumento de la función con los colores que quieras.

Color de las barras de un gráfico de barras por grupo en Python

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]
colores = ["#619cff", "#00ba38", "#f8766d"]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, color = colores)
# plt.show()

Transparencia

Ten en cuenta que el argumento alpha permite cambiar la transparencia del color de fondo de las barras pasando un número entre 0 y 1.

Transparencia del color de fondo de las barras de un gráfico en Python

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, color = "darkseagreen", alpha = 0.25)
# plt.show()

Color del borde

Por último, también puedes personalizar el color del borde de las barras con edgecolor, tanto para todas las barras como para cada una de ellas. Ten en cuenta que linewidth te permitirá cambiar el grosor de los bordes.

Color de borde de un diagrama de barras en Python

import matplotlib.pyplot as plt

# Datos
x = ["A", "B", "C"]
y = [3, 5, 1]

# Gráfico de barras
fig, ax = plt.subplots()
ax.bar(x = x, height = y, color = "w",
       edgecolor = "darkseagreen", linewidth = 2)
# plt.show()
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar