es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Anotando axvline en matplotlib.

Estoy dibujando algunos números de mis dataframes de pandas df1 y df2 utilizando seaborn y subplots, y me gustaría agregar una línea anotada mostrando el valor mediano para una columna de cada dataframe en los subplots.

Puedo dibujar una línea en la mediana utilizando axvline en el siguiente código, pero no estoy seguro de cómo anotar la línea dibujada para mostrar el valor mediano real:

df1median = df1['values'].median()
df2median = df2['values'].median()

fig, axes = plt.subplots(1,2)
sns.kdeplot(data=df1, x='values', ax=axes[0])
axes[0].axvline(df1median)

sns.kdeplot(data=df2, x='values', ax=axes[1])
axes[1].axvline(df2median)

Puedo anotar manualmente usando plt.text y configurando la posición manualmente, pero me gustaría encontrar una manera de anotar la línea dibujada en cada subplot directamente. ¿Es esto posible?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible anotar la línea vertical dibujada directamente en cada subtrama. Puedes usar el método ax.annotate para añadir la anotación al gráfico. Así es cómo puedes modificar tu código para añadir las anotaciones:

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    df1median = df1['values'].median()
    df2median = df2['values'].median()
    
    fig, axes = plt.subplots(1, 2)
    
    sns.kdeplot(data=df1, x='values', ax=axes[0])
    axes[0].axvline(df1median)
    axes[0].annotate(f'Mediana: {df1median:.2f}', xy=(df1median, 0), 
                     xytext=(df1median, 0.05), ha='center',
                     arrowprops=dict(facecolor='black', arrowstyle='->'))
    
    sns.kdeplot(data=df2, x='values', ax=axes[1])
    axes[1].axvline(df2median)
    axes[1].annotate(f'Mediana: {df2median:.2f}', xy=(df2median, 0), 
                     xytext=(df2median, 0.05), ha='center',
                     arrowprops=dict(facecolor='black', arrowstyle='->'))
    
    plt.show()
    

    En este código, axes[0].annotate y axes[1].annotate se usan para añadir las anotaciones a la primera y segunda subtrama, respectivamente. El argumento xy especifica la ubicación del punto que deseas anotar (en este caso, el valor de la mediana), y xytext especifica la ubicación del texto de la anotación. El argumento arrowprops se usa para dibujar una flecha que apunta desde el texto de la anotación hasta el punto de anotación.

    Ten en cuenta que se utiliza f'Mediana: {df1median:.2f}' y f'Mediana: {df2median:.2f}' para dar formato al texto de la anotación y mostrar el valor de la mediana con dos decimales.

Comments are closed.