Considera los siguientes datos a modo de ejemplo:
import pandas as pd
# Datos
df = pd.DataFrame({
"genero": ["Hombre", "Hombre", "Hombre", "Hombre",
"Mujer", "Mujer", "Mujer", "Mujer"],
"fumador": ["Sí", "Sí", "No", "No",
"Sí", "No", "No", "No"]})
mosaic
Un gráfico de mosaico representa la relación entre dos o más variables categóricas: el área de cada baldosa es proporcional al número de observaciones de esa combinación de categorías. La función mosaic de statsmodels.graphics.mosaicplot lo construye directamente a partir de un data frame de pandas y una lista de las columnas a cruzar.
from statsmodels.graphics.mosaicplot import mosaic
mosaic(df, ["genero", "fumador"])
# plt.show()

Colores
Pasa una función a properties: recibe la tupla de categorías de cada baldosa (por ejemplo ("Hombre", "Sí")) y debe devolver un diccionario de propiedades de patch de matplotlib, como color.
from statsmodels.graphics.mosaicplot import mosaic
colores = {"Sí": "#DD8452", "No": "#4C72B0"}
def props(key):
return {"color": colores[key[1]]}
mosaic(df, ["genero", "fumador"], properties = props)
# plt.show()

Etiquetas
Por defecto cada baldosa se etiqueta con su tupla de categorías. Sobrescríbelo con labelizer, una función que también recibe la tupla de categorías y devuelve el texto a mostrar.
from statsmodels.graphics.mosaicplot import mosaic
def labelizer(key):
return "/".join(key)
mosaic(df, ["genero", "fumador"], labelizer = labelizer)
# plt.show()

Espacio entre baldosas
Controla la separación entre baldosas con gap, bien un único valor para todas o una lista con un espacio por cada nivel de la primera variable categórica.
from statsmodels.graphics.mosaicplot import mosaic
mosaic(df, ["genero", "fumador"], gap = 0.03)
# plt.show()

Fija horizontal = False para invertir el orden de división de las variables categóricas, y pasa title para añadir un título directamente (en lugar de una llamada aparte a plt.title).
from statsmodels.graphics.mosaicplot import mosaic
mosaic(df, ["genero", "fumador"],
horizontal = False, title = "Hábito de fumar por género")
# plt.show()

También te puede interesar