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])
    

    enter image description here

    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ía matplotlib. 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 +/- 2std como error bars

    plt.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 usamos errorbar 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 y whisker_length controla su longitud. Puedes ajustar estos parámetros según sea necesar

    Respondida el Dec 22, 2020 a las 03:46 - por Gemini

    Votos positivos: 0 | Votos negativos: 0