Gráfico de cajas (box plot) en plotly

Gráficos de caja en plotly con la función box

Puedes crear box plots en plotly con la función box de plotly express. La sintaxis de la función es muy sencilla, ya que tan solo necesitas pasar una variable numérica a y para crear un gráfico de cajas vertical. Ten en cuenta que también puedes pasar tus datos como una columna de un data frame.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(4)
var = np.random.normal(0, 1, 500)

fig = px.box(y = var)

# Alternativa:
# import pandas as pd
# df = pd.DataFrame({'var': np.random.normal(0, 1, 500)})
# fig = px.box(df, y = 'var')

fig.show()

Box plot horizontal

Si lo prefieres, puedes crear un gráfico horizontal. Para ello tendrás que pasar tus datos a x en lugar de a y.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(1)
var = np.random.normal(0, 1, 500)

fig = px.box(x = var)

fig.show()

Intervalos de confianza para la mediana

A los gráficos de caja se les puede agregar unas muescas, llamadas notch en inglés, que representan el intervalo de confianza al 95% para la mediana. Puedes agregarlo a tu gráfico estableciendo notched = True.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(4)
var = np.random.normal(0, 1, 500)

fig = px.box(y = var, notched = True)

fig.show()

Observaciones

En ocasiones resulta de interés mostrar las observaciones que generan el gráfico de cajas, ya que diferentes observaciones pueden crear el mismo box plot. Agregarlas te ayudarán a entender la distribución subyacente de los datos. Tendrás que establecer el argumento points como 'all' para agregarlos.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(4)
var = np.random.normal(0, 1, 500)

fig = px.box(y = var, points = 'all')

fig.show()

Eliminar datos atípicos

Si lo necesitas, estableciendo el argumento points como False se eliminarán los datos atípicos, en caso de que los haya.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(4)
var = np.random.normal(0, 1, 500)

fig = px.box(y = var, points = False)

fig.show()

Color

Es posible personalizar el color del box plot pasando un nuevo color al argumento color_discrete_sequence dentro de un array, tal y como se muestra a continuación.

import plotly.express as px
import numpy as np

# Datos de muestra
np.random.seed(4)
var = np.random.normal(0, 1, 500)

fig = px.box(y = var, color_discrete_sequence = ['green'])

fig.show()

Gráfico de cajas por grupo

La función box de plotly permite crear box plots por grupo. Tendrás que pasar tu variable categórica que define los grupos al argumento color de la función.

import plotly.express as px
import numpy as np
import pandas as pd
import random; random.seed(1)

# Datos de muestra
np.random.seed(4)
df = pd.DataFrame({'var': np.random.normal(0, 1, 500),
                   'grupo': random.choices(["G1", "G2", "G3"], k = 500)})

fig = px.box(df, y = 'var', color = 'grupo')

fig.show()

El color para cada grupo se puede personalizar pasando un array de colores a color_discrete_sequence o especificando un color para cada grupo con color_discrete_map.

import plotly.express as px
import numpy as np
import pandas as pd
import random; random.seed(1)

# Datos de muestra
np.random.seed(4)
df = pd.DataFrame({'var': np.random.normal(0, 1, 500),
                   'grupo': random.choices(["G1", "G2", "G3"], k = 500)})

fig = px.box(df, y = 'var', color = 'grupo',
             color_discrete_map = {'G1': '#90BA4C', 'G2': '#DD9D31', 'G3': '#E25247'})

fig.show()

Ten en cuenta que la función también proporciona un argumento llamado boxmode que se puede establecer como 'overlay' para que los gráficos de caja se solapen unos encima de otros. Esto puede ser útil para comparar las medianas para cada grupo cuando el número de grupos es pequeño.

import plotly.express as px
import numpy as np
import pandas as pd
import random; random.seed(1)

# Datos de muestra
np.random.seed(4)
df = pd.DataFrame({'var': np.random.normal(0, 1, 500),
                   'grupo': random.choices(["G1", "G2", "G3"], k = 500)})

fig = px.box(df, y = 'var', color = 'grupo',
             boxmode = 'overlay')

fig.show()
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar