2012-05-22 19 views
6

Sto cercando di visualizzare le posizioni di due array l'uno con l'altro. La mia tabella assomiglia a questoscatterplot con xerr e 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 

quello che fondamentalmente voglio è qualcosa di simile: scatterplot with two errorbars

Quindi, in questa trama ogni punto ha fondamentalmente tre proprietà: 1. Barra xError 2. bar yerror 3 descrizione che cosa rappresenta questo punto.

Ho la sensazione che questo può essere fatto elegantemente con matplotlib, e mentre ho provato alcune cose con errors che non mi davano proprio quello che mi aspetterei. E non ho ancora scoperto come posizionare le didascalie in una trama.

risposta

8

Sembra che tu voglia qualcosa del genere?

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 funziona proprio come plot. Se si desidera un grafico "a dispersione", è necessario specificare linestyle='none' (o equivalentemente, ls='none'). In base al tuo disegno, non vuoi i cappucci sui caratteri erratici, quindi ho specificato capsize=0. Allo stesso modo, sembra che vogliate delle linee piuttosto spesse per gli errors, quindi elinewidth=2.

Se si desidera un indicatore oltre ai caratteri erratici, è sufficiente specificare marker='o' (o qualsiasi altro stile di marcatore desiderato) su errorbar.

annotate è il modo più semplice per annotare i punti su un grafico. Qui, ho specificato che l'annotazione deve essere posizionata 8 punti sopra e alla destra di ogni misura.

0

Will not

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 le barre di errore sono sugli assi sbagliate?

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) 

noti che precede Yerr XERR, così

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

rende il vostro barre di errore siano indietro - Yerr = XERR, XERR = Yerr. Un buon momento per usare args nominati:

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