Parcela diferentes barras de errores en panda concat plot

He hecho una función tratando de trazar algunas barras de la media de algunos valores en un marco de datos. Donde estoy teniendo problemas es añadir los errores respectivos para cada uno de los complots de barras. No puedo entender cómo uno debe usar el Yerr Parámetro correctamente.

def env_mean_concat(dataframe_name, title_name, max_score):
  x = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].mean().rename('Environment 1')
  y = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].mean().rename('Environment 2')

  plot = pd.concat([x, y], axis=1).plot(kind = "bar", yerr=1) #yerr=env_std_dev(dataframe_name).values.T) 

  plot.set_title("Mean of " + title_name)
  plot.set_xlabel("Questions")
  plot.set_ylabel("Score")
  plot.set_ylim(0, max_score)

También he hecho una función que devuelve la desviación estándar de los datos

def env_std_dev(dataframe_name):
  std_1 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].std()
  std_2 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].std()
  return std_1, std_2

plot

En la imagen se puede ver la trama, pero con yerr=1 para fines de demostración.

¿Qué puedo hacer para conseguir std_1 para ser la barra de error en la barra azul, y std_2 para ser el error en la barra naranja?

Pregunta hecha hace 3 años, 5 meses, 0 días - Por codecatalyst


3 Respuestas:

  • Claro que era sólo que tenía problemas para entender la estructura de Yerr!

    Cambio del código de desviación

    def env_std_dev(dataframe_name):
      std_1 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].std()
      std_2 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].std()
    
      std = [std_1.to_numpy(), std_2.to_numpy()]
      
      return std
    

    Que ahora

    yerr=env_std_dev(dataframe_name)
    

    dentro env_mean_concat nos da mi trama deseada: enter image description here

    Gracias a los chicos que me apuntan en la dirección correcta. Echaré un vistazo a Seaborn en el futuro con seguridad!

    Respondida el Dec 16, 2020 a las 10:24 - por scriptsorcerer

    Votos positivos: 0 | Votos negativos: 0

  • Para agregar barras de error a tu gráfico de barras en Pandas usando concat y plot, puedes hacer lo siguiente:

    • Modifica tu función `env_mean_concat` para incluir los errores estándar de cada entorno:
    python
    def env_mean_concat(dataframe_name, title_name, max_score):
        x = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].mean().rename('Environment 1')
        y = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].mean().rename('Environment 2')
    
        std_1, std_2 = env_std_dev(dataframe_name)
    
        plot = pd.concat([x, y], axis=1).plot(kind="bar", yerr=[std_1.values, std_2.values]) 
    
        plot.set_title("Mean of " + title_name)
        plot.set_xlabel("Questions")
        plot.set_ylabel("Score")
        plot.set_ylim(0, max_score)
    
    • Asegúrate de que la función `env_std_dev` devuelva las desviaciones estándar en un formato adecuado:
    python
    def env_std_dev(dataframe_name):
        std_1 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1']['Score'].std()
        std_2 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2']['Score'].std()
        return std_1, std_2
    
    • Asegúrate de que la columna 'Score' sea la que estás utilizando para calcular las desviaciones estándar.

    Con estos cambios, en la función env_mean_concat, estás pasando los errores estándar correspondientes a cada barra al parámetro yerr, que acepta una lista de errores para cada barra individual en una trama de barras.

    Respondida el Dec 17, 2020 a las 10:23 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para trazar barras de error en un gráfico de barras de pandas, puedes usar el parámetro yerr. Este parámetro espera una lista o array de valores de error correspondientes a los valores de datos. En tu caso, tienes dos conjuntos de datos, uno para cada entorno, y quieres trazar las barras de error correspondientes a las desviaciones estándar de cada conjunto de datos.

    Aquí tienes el código modificado con la corrección:

    
    import pandas as pd
    
    def env_mean_concat(dataframe_name, title_name, max_score):
      x = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].mean().rename('Environment 1')
      y = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].mean().rename('Environment 2')
    
      

    Calcula las desviaciones estándar

    std_1 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 1'].std() std_2 = dataframe_name[dataframe_name['What environment did you use during the experiment?'] == 'Environment 2'].std()

    Crea una lista de barras de error

    yerr = [std_1.values, std_2.values]

    Traza el gráfico de barras con barras de error

    plot = pd.concat([x, y], axis=1).plot(kind = "bar", yerr=yerr) plot.set_title("Mean of " + title_name) plot.set_xlabel("Questions") plot.set_ylabel("Score") plot.set_ylim(0, max_score)

    Con esta modificación, el código calculará las desviaciones estándar para cada entorno y creará una lista de barras de error. Esta lista se pasará al parámetro yerr en la función plot(), que trazará las barras de error correspondientes a las barras azules y naranjas.

    Respondida el Dec 17, 2020 a las 10:34 - por Gemini

    Votos positivos: 0 | Votos negativos: 0