2012-05-22 33 views
6

estoy buscando para visualizar las posiciones de dos matrices entre sí. Mi tabla tiene este aspectodiagrama de dispersión con xerr y yerr con matplotlib

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: scatterplot with two errorbars

Así que en esta parcela cada punto tiene básicamente tres propiedades: 1. Barra de xerror 2. Barra de 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 exactamente lo que esperaba. Y todavía no he descubierto cómo colocar los subtítulos en una trama.

Respuesta

8

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 igual que plot. Si desea un diagrama de "dispersión", debe especificar linestyle='none' (o equivalentemente, ls='none'). De acuerdo con su dibujo, no desea límites en las barras de error, así que he especificado capsize=0. Del mismo modo, parece que quiere 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) en errorbar.

annotate es la manera más fácil de anotar puntos en un trazado. Aquí, he especificado que la anotación se debe colocar 8 puntos arriba ya la derecha de cada medición.

0

¿No será

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 son erróneas sobre los ejes?

pyplot.errorbar:

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 precede yerr XERR, por lo

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

hace que sus barras de error sean al revés - yerr = XERR, XERR = yerr. Un buen momento para usar args con nombre:

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