Seaborn: Cómo escalar el eje Y al 100 por ciento para cada valor categórico.
Objetivo:
Deseo crear un histograma de barras apiladas de la característica categórica “PaperlessBilling” (conjunto de datos de Churn de clientes de telecomunicaciones), mostrar el eje Y como un porcentaje y mostrar la distribución de churn como el tono. Pero, el porcentaje no se calcula de manera acumulativa.
Aquí está lo que esperaba si se utiliza R:
ggplot(Churn, aes(SeniorCitizen, fill = Churn)) +
geom_bar(position = "fill") +
xlab("Estado del Ciudadano Mayor") +
ylab("Porcentaje") +
scale_y_continuous(labels = scales::percent) +
scale_x_discrete(labels = c("No Ciudadanos Mayores", "Ciudadanos Mayores")) +
scale_fill_manual(name = "Estado de Churn", values = c("green2", "red1"), labels = c("No", "Sí")) +
ggtitle("La Proporción de Churns por Estado de Ciudadano Mayor") +
theme_classic() +
theme(legend.position = "bottom",
plot.title = element_text(hjust = 0.5, size = 15))
Aquí está la salida del código anterior (observa que ambas categorías suman un total del 100%):
Esto es lo que he hecho:
fig, axs = plt.subplots(figsize=(5, 5))
sns.histplot(
df,
x = "PaperlessBilling",
hue = "Churn",
multiple = "stack",
stat = "percent"
)
Esta es la salida del código anterior:
davy.ai
Para crear un histograma de barras apiladas del atributo categórico
PaperlessBilling
con la distribución de churn como color de la medida, y mostrar el eje Y como un porcentaje pero sin realizar cálculos acumulativos, se puede utilizar el siguiente código:En este fragmento de código, hemos modificado algunos argumentos de la función
sns.histplot()
para obtener el resultado deseado.multiple
está configurado en"fill"
para que cada gráfica tenga un color diferente en lugar de apilarse una sobre otra.stat
está configurado en"probability"
para calcular el porcentaje de cada grupo en lugar del porcentaje acumulativo.element
está configurado en"step"
para visualizar las barras apiladas como una función escalonada, lo que ayuda a distinguir claramente las barras.common_norm
está configurado enFalse
para normalizar cada barra de manera independiente.shrink
está configurado en0.8
para reducir ligeramente el ancho de cada barra y evitar que se toquen entre sí.PercentFormatter
al eje Y para mostrar el eje Y como un porcentaje.La visualización resultante se vería así: