Saltar al contenido

Gráfico de recuento Seaborn con eje y normalizado por grupo

No olvides que en las ciencias cualquier problema casi siempere puede tener varias resoluciones, por lo tanto nosotros enseñamos lo más óptimo y eficiente.

Solución:

Con las versiones más nuevas de Seaborn puedes hacer lo siguiente:

import numpy as np
import pandas as pd
import seaborn as sns
sns.set(color_codes=True)

df = sns.load_dataset('titanic')
df.head()

x,y = 'class', 'survived'

(df
.groupby(x)[y]
.value_counts(normalize=True)
.mul(100)
.rename('percent')
.reset_index()
.pipe((sns.catplot,'data'), x=x,y='percent',hue=y,kind='bar'))


producción

ingrese la descripción de la imagen aquí

Actualizar

Si también quieres porcentajes, puedes hacer lo siguiente:

import numpy as np
import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
df.head()

x,y = 'class', 'survived'

df1 = df.groupby(x)[y].value_counts(normalize=True)
df1 = df1.mul(100)
df1 = df1.rename('percent').reset_index()

g = sns.catplot(x=x,y='percent',hue=y,kind='bar',data=df1)
g.ax.set_ylim(0,100)

for p in g.ax.patches:
    txt = str(p.get_height().round(2)) + '%'
    txt_x = p.get_x() 
    txt_y = p.get_height()
    g.ax.text(txt_x,txt_y,txt)

ingrese la descripción de la imagen aquí

Podría estar confundido. La diferencia entre su salida y la salida de

occupation_counts = (df.groupby(['income'])['occupation']
                     .value_counts(normalize=True)
                     .rename('percentage')
                     .mul(100)
                     .reset_index()
                     .sort_values('occupation'))
p = sns.barplot(x="occupation", y="percentage", hue="income", data=occupation_counts)
_ = plt.setp(p.get_xticklabels(), rotation=90)  # Rotate labels

es, me parece, sólo el orden de las columnas.

ingrese la descripción de la imagen aquí

Y pareces importarte eso, desde que pasas sort=False. Pero luego, en su código, el orden se determina únicamente por casualidad (y el orden en el que se itera el diccionario incluso cambia de una ejecución a otra con Python 3.5).

Puede usar la biblioteca Dexplot para contar y normalizar sobre cualquier variable para obtener frecuencias relativas.

Pasa el count función el nombre de la variable que le gustaría contar y producirá automáticamente un gráfico de barras de los recuentos de todos los valores únicos. Utilizar split para subdividir las cuentas por otra variable. Tenga en cuenta que Dexplot envuelve automáticamente las etiquetas x-tick.

dxp.count('occupation', data=df, split='income')

ingrese la descripción de la imagen aquí

Utilizar el normalize parámetro para normalizar los conteos sobre cualquier variable (o combinación de variables con una lista). También puedes usar True para normalizar sobre el gran total de conteos.

dxp.count(‘ocupación’, data=df, split=’ingresos’, normalizar=’ingresos’)

ingrese la descripción de la imagen aquí

Te mostramos reseñas y calificaciones

Te invitamos a asentar nuestra publicación poniendo un comentario o valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *