Histogramas 2D en plotly

Histogramas 2D en plotly con density_heatmap

Los histogramas 2D son una generalización de los histogramas para dos variables que consisten en dividir los datos en clases y aplicar una función (por lo general el conteo de observaciones) para obtener un valor asociado a cada clase que a su vez determinará su color. Con plotly, puedes crear este tipo de visualización con la función density_heatmap de plotly express.

Tendrás que pasar como entrada dos variables numéricas a x e y. Puedes especificar un título y etiquetas de los ejes si así lo quieres con title y labels, respectivamente. También puedes modificar el rango de los ejes con range_x y/o range_y.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y,
                         title = 'Histograma 2D',
                         labels = {'x': 'Eje X', 'y': 'Eje Y'})

fig.show()

Número de clases

Los argumentos nbinsx y nbinsy controlan el número de clases sobre los ejes X e Y, respectivamente. Tendrás que especificar un entero positivo para uno o ambos ejes si quieres modificar los valores por defecto.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y,
                         nbinsx = 10, nbinsy = 10)

fig.show()

Funciones de agregación

El argumento histfunc controla la función a ser utilizada para resumir los valores pasados a z. Esto es, la función usada para calcular el valor correspondiente a cada clase. Las posibles funciones son 'count' (conteo, por defecto), 'sum' (suma), 'avg' (media), 'min' (valor mínimo) y 'max' (valor máximo).

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2
z = x + np.random.normal(size = 500)

fig = px.density_heatmap(x = x, y = y, z = z, histfunc = 'avg')

fig.show()

Textos

La función density_heatmap proporciona un argumento llamado text_auto que se puede utilizar para mostrar textos dentro de cada área mostrando el conteo, la suma, la media, el valor mínimo o máximo, dependiendo de la función de agregación utilizada.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y, text_auto = True)

fig.show()

Paleta de colores

La paleta de colores usada por defecto para colorear las clases se puede personalizar con color_continuous_scale. Ten en cuenta que también puedes personalizar el punto central de la paleta con color_continuous_midpoint o limitar el rango de los colores pasando una lista con dos números a range_color. Si quieres saber los nombres de las paletas de colores de plotly importa plotly express como px y luego ejecuta px.colors.named_colorscales().

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y, color_continuous_scale = 'gnbu')

fig.show()

Histograma 2D con gráficos marginales

Utilizando los argumentos marginal_x y marginal_y puedes agregar gráficos marginales al histograma 2D de plotly. Las posibles opciones son 'rug' para rug plots, 'box' para gráficos de caja, 'violin' para gráficos de violín e 'histogram' para histogramas. Recuerda que no tienes por qué especificar gráficos marginales para ambos ejes y que en otro caso no tienes por qué establecer el mismo tipo de gráfico marginal para cada eje.

Rug plots marginales

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y,
                         marginal_x = 'rug', marginal_y = 'rug')

fig.show()

Box plots marginales

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y,
                         marginal_x = 'box', marginal_y = 'box')

fig.show()

Gráficos de violín marginales

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y,
                         marginal_x = 'violin', marginal_y = 'violin')

fig.show()

Histogramas marginales

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(2)
x = np.random.normal(size = 500)
y = x + np.random.normal(size = 500) ** 2

fig = px.density_heatmap(x = x, y = y,
                         marginal_x = 'histogram', marginal_y = 'histogram')

fig.show()
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar