diagrama de dispersión con xerr y yerr con matplotlib

Estoy buscando visualizar las posiciones de dos matrices entre sí. Mi mesa se ve así

    Number          Description      value_1  value_2  err_1 err_2
         1          descript_1       124.46   124.46   22.55  54.2
         2          Descript_2       8.20     50.2     0.37   0.1 
         3          Descript_2       52.55    78.3     3.77   2.41
         4          Descript_2       4.33     778.8    0.14   1.78

lo que básicamente quiero es algo como esto: diagrama de dispersión con dos barras de error

Entonces, en esta gráfica, cada punto tiene básicamente tres propiedades: 1. barra xerror 2. barra yerror 3. descripción de lo que representa este punto.

Tengo la sensación de que esto se puede hacer elegantemente con matplotlib, y aunque probé algunas cosas con barras de error que no me dieron lo que esperaba. Y aún no he descubierto cómo colocar los subtítulos en una trama.

preguntado el 22 de mayo de 12 a las 18:05

2 Respuestas

¿Parece que quieres algo como esto?

import matplotlib.pyplot as plt

x = [124.46, 8.20, 52.55, 4.33]
y = [124.46, 50.2, 78.3, 778.8]
xerr = [54.2, 0.1, 2.41, 1.78]
yerr = [22.55, 0.37, 3.77, 0.14]

descrip = ['Atom 1', 'Atom 2', 'Atom 3', 'Atom 4']


plt.errorbar(x, y, xerr, yerr, capsize=0, ls='none', color='black', 
            elinewidth=2)

for xpos, ypos, name in zip(x, y, descrip):
    plt.annotate(name, (xpos, ypos), xytext=(8, 8), va='bottom',
                textcoords='offset points')

plt.show()

enter image description here

errorbar funciona como plot. Si desea un diagrama de "dispersión", debe especificar linestyle='none' (o equivalente, ls='none'). Según su dibujo, no desea mayúsculas en las barras de error, por lo que he especificado capsize=0. Del mismo modo, parece que desea líneas bastante gruesas para las barras de error, por lo tanto elinewidth=2.

Si desea un marcador además de las barras de error, simplemente especifique marker='o' (o cualquier estilo de marcador que desee) para errorbar.

annotate es la forma más fácil de anotar puntos en un gráfico. Aquí, he especificado que la anotación debe colocarse 8 puntos arriba y a la derecha de cada medida.

respondido 07 nov., 13:18

No lo hará

import matplotlib.pyplot as plt

x = [100, 200, 300, 400]
y = [100, 200, 300, 400]
xerr = [100, 100, 100, 100]
yerr = [20, 20, 20, 20]

plt.errorbar(x, y, xerr, yerr, ls='none')
plt.show()

significa que las barras de error están en los ejes equivocados?

pyplot.barra de error:

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt=u'', ecolor=None, elinewidth=None, capsize=3, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, hold=None, **kwargs)

Tenga en cuenta que yerr precede a xerr, por lo que

plt.errorbar(x, y, xerr, yerr, ls='none')

hace que las barras de error estén al revés: yerr=xerr, xerr=yerr. Un buen momento para usar argumentos con nombre:

plt.errorbar(x, y, xerr=xerr, yerr=yerr, ls='none')

Respondido el 15 de Septiembre de 14 a las 00:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.