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()
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()
También te puede interesar