Personalizar el valor de los whiskers en boxplot, python
Quiero trazar una caja con media+(-) 2* pt como los valores de gorro de Whisker. Sin embargo, boxplot() sólo puede establecer valores de capucha como valores de percentiles. Por ejemplo.
# The code below plot a boxplot that has cap values equal to 5th and 95th percentiles.
boxplot(data_list,Whis = [5,95])
Dado que mi distribución no es una distribución normal, entonces los percentiles 95/5 no serán los (mean+2std)/(mean-2std). Por lo tanto, es inexacto utilizar valores de percentiles 5/95 para representar media+(-) 2*std.
Mi pregunta es ¿cómo puedo los clientes un boxplot con los valores de gorro personalizados de los bigotes? Muchas gracias.
Pregunta hecha hace 3 años, 4 meses, 25 días - Por techtrailblazer
3 Respuestas:
-
Matplotlib no proporciona ningún medio para especificar los silbidos de otro modo que como quantiles. Si quieres usar media y ± 2 veces desviación estándar tendrás que rodar tu propio, es decir, convertir estos valores a percentiles y proporcionarlos como
whis
Paramters.Ejemplo:
import numpy as np import matplotlib.pyplot as plt np.random.seed(42) data = np.random.normal(size=10_000) mean = np.mean(data) std = np.std(data) whis = np.interp([mean-2*std, mean+2*std], np.sort(data), np.linspace(0,1,data.size)) * 100 fig, (axl,axr) = plt.subplots(ncols=2) axl.set_title('Default') axl.boxplot(data) axr.set_title(f'μ ± 2σ ({mean-2*std:.2f}, {mean+2*std:.2f})') axr.boxplot(data, whis=whis, usermedians=[mean])
Hay una caveat: los silbidos no se extraen del dado primero al segundo valor percentil dado (parametro)
whis
) pero más bien desde el punto de datos más bajo sobre el primero al punto de datos más alto debajo del segundo valor percentil. Es por eso que para datos relativamente pequeños establece que los whiskers terminan en la trama para no coincidir exactamente μ ± 2σ.Pero ten en cuenta que esto es no una caja y silbidos trama másAsí que deberías describir lo que estás tramando aquí, de lo contrario la gente se equivocará.
Respondida el Dec 21, 2020 a las 03:39 - por cyberjedi
Votos positivos: 0 | Votos negativos: 0 -
Para personalizar los valores de los whiskers en un boxplot en Python, puedes utilizar la función
boxplot
de la libreríamatplotlib
. En este caso, puedes calcular manualmente los valores que deseas para los whiskers, en lugar de utilizar los percentiles.Aquí tienes un ejemplo de cómo podrías hacer esto:
python import matplotlib.pyplot as plt import numpy as np
Generar datos de ejemplo
np.random.seed(10) data_list = [np.random.normal(0, 1, 100) for _ in range(3)]Calcular los valores de los whiskers
means = [np.mean(data) for data in data_list] stds = [np.std(data) for data in data_list] whisker_low = [mean - 2std for mean, std in zip(means, stds)] whisker_high = [mean + 2std for mean, std in zip(means, stds)]Crear un boxplot con los valores de los whiskers personalizados
plt.boxplot(data_list, whis=[0, 100], showfliers=False)No mostrar los valores atípicos
plt.errorbar(np.arange(1, len(data_list)+1), means, yerr=2np.array(stds), fmt='o', color='red')Mostrar la media +/- 2
std como error barsplt.xticks(np.arange(1, len(data_list)+1), ['Grupo 1', 'Grupo 2', 'Grupo 3'])Etiquetas en el eje x
plt.show()En este código, primero calculamos los valores de los whiskers personalizados como la media más/menos 2 veces la desviación estándar. Luego, creamos un boxplot con
showfliers=False
para no mostrar los valores atípicos y usamoserrorbar
para mostrar la media más/menos 2 veces la desviación estándar.Es importante tener en cuenta que este enfoque personalizado puede no seguir estrictamente las convenciones de un boxplot estándar, pero te permitirá representar los valores de los whiskers según tus propios criterios.
Respondida el Dec 22, 2020 a las 03:37 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Puedes modificar los bigotes de un boxplot en R utilizando la libreria
ggpubr
. Aquí tienes un ejemplo de cómo puedes hacerlo:r library(ggplot2) library(ggpubr)
Crea un boxplot
ggplot(data = df, mapping = aes(x = factor, y = value)) + geom_boxplot() + stat_boxplot(geom = "errorbar", width = 0.4, size = 0.5, linewidth = 0.4)Ahora puedes modificar los bigotes utilizando la siguiente sintaxis:
r stat_boxplot(geom = "errorbar", width = 0.4, size = 0.5, linewidth = 0.4, outlier.alpha = 0, notch = FALSE, whisker_width = 0.5, whisker_length = 0.5)
En este ejemplo,
whisker_width
controla el ancho de los bigotes ywhisker_length
controla su longitud. Puedes ajustar estos parámetros según sea necesarRespondida el Dec 22, 2020 a las 03:46 - por Gemini
Votos positivos: 0 | Votos negativos: 0