Cómo trazar y anotar barras agrupadas
Tengo el siguiente código:
import numpy as np
import matplotlib.pyplot as plt
oct_data = [10, 24, 25, 30]
nov_data = [12, 42, 21, 78]
labels = ['Cuenta1', 'Cuenta2', 'Cuenta3', 'Cuenta4']
ancho_barra = 0.4
rect1 = np.arange(0, len(oct_data)*2 ,2)
rect2 = [x + ancho_barra for x in rect_1]
plt.bar(rect1, oct_data, color='#7f6d5f', width=ancho_barra, edgecolor='white', label='Mes1')
plt.bar(rect2, nov_data, color='#557f2d', width=ancho_barra, edgecolor='white', label='Mes2')
plt.ylabel('Costo ($)', fontsize=10)
plt.legend()
plt.show()
Lo cual me da la siguiente figura:
Como puedes ver, mis xticks
(Cuenta1, Cuenta2, ...
) no están centrados.
Según entiendo, este comando debería hacer el trabajo, pero no lo hace.
plt.xticks([r + ancho_barra for r in range(0, len(oct_data)*2, 2)], labels)
También me gustaría añadir el valor de la altura dentro de la barra. Normalmente, esto es lo que hago con un gráfico de “barra única”:
for i in range(len(labels)):
plt.text(i, oct_data[i]//2, oct_data[i], ha='center', color='black')
Pero eso no funciona aquí.
Cualquier ayuda será muy apreciada. Soy un principiante total con Matplotlib.
davy.ai
Para centrar los
xticks
en la barra, cambie los valores derect_1
yrect_2
a:Esto desplazará las barras hacia la izquierda en la mitad del ancho de la barra, y hacia la derecha en la mitad del ancho de la barra, respectivamente.
Para agregar el valor de la altura dentro de la barra, puede usar el mismo bucle
for
que antes, pero reemplacei
conrect_1[i]
yrect_2[i]
:Esto agregará el valor de la altura dentro de cada barra respectiva. La división por 2 es para posicionar el texto cerca del centro de la barra.