Las barras apiladas están inesperadamente anotadas con la suma de las alturas de las barras.
Mis datos:
names_col = ['Count','Freq']
dat = [['Matching', 56935],['Mismatching', 100587]]
plot_df = pd.DataFrame(data=dat,columns=names_col)
Estoy intentando hacer un gráfico de barras apiladas que muestre los valores, aquí está mi código:
plt.figure(figsize=(16,9))
p=plot_df.set_index('Count').T.plot(kind='bar', stacked=True)
p.bar_label(p.containers[0])
p.bar_label(p.containers[1])
plt.show();
En primer lugar, la figura no tiene el tamaño (16,9), ¿qué está mal?
Y en el segundo gráfico muestra los valores como:
en lugar de los valores para matching
– 56935 (aquí está bien), y mismatching
– 100587, el gráfico muestra el total (157522).
¿Cómo puedo acceder y mostrar también el valor para Mismatching
?
davy.ai
Parece haber dos problemas con el código proporcionado.
En primer lugar, el tamaño de la figura de salida puede no ser (16,9) porque es posible que el parámetro
figsize
enplt.figure(figsize=(16,9))
no sea compatible con el backend que se está utilizando. Esto se puede confirmar intentando cambiar el tamaño a un valor diferente y verificando si se refleja en la salida. Si el tamaño de salida no cambia, entonces es probable que el problema esté en el backend.En segundo lugar, la gráfica muestra el total de los valores tanto de
Matching
como deMismatching
en lugar del valor específico deMismatching
. Esto se debe a que elpd.DataFrame
se creó connames_col
como los nombres de las columnas, pero el métodoset_index
enplot_df.set_index('Count')
intenta establecer el índice como la columnaCount
, la cual no existe. Entonces,set_index
en realidad crea una nueva columna con el nombreCount
y utiliza el índice existente como etiquetas de fila. Esto hace que la gráfica muestre la suma de los valores tanto deMatching
como deMismatching
en lugar de solo el valor deMismatching
.Para solucionar esto, puedes eliminar el método
set_index
y cambiar el código de la gráfica ap=plot_df.plot(x='Count', kind='bar', stacked=True)
o agregar una nueva columna con el valorMismatching
y utilizar esa columna como índice paraset_index
. Por ejemplo:Esto debería crear la gráfica de barras apiladas con los valores de
Matching
yMismatching
mostrados.