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