2012-04-18 15 views
13

Ho una serie temporale di dati per i quali ho la quantità, y, e il suo errore, yerr. Vorrei ora creare un grafico che mostri y contro fase (cioè tempo/periodo% 1) con errorber verticali (yerr). Per questo, di solito uso pyplot.errorbar (time, y, yerr = yerr, ...)Colormap per caratteri erratici nel grafico a dispersione x-y usando matplotlib

Tuttavia, mi piacerebbe usare una barra di colore/mappa per indicare il valore del tempo in questo stesso grafico.

Quello che così faccio è la seguente:

pylab.errorbar(phase, y, yerr=err, fmt=None, marker=None, mew=0) 
pylab.scatter(phase, y, c=time, cmap=cm) 

Purtroppo, questo sarà tracciare errorbars tinta unita (di default è blu). Dato che ho ~ 1600 punti per trama, questo fa scomparire dietro la barra di errore la mappa di colori del grafico a dispersione. Ecco una foto mostra quello che voglio dire:

enter image description here

C'è un modo che io possa avere le barre di errore da tracciare usando la stessa mappa di colori di quello utilizzato nel grafico a dispersione? Non voglio chiamare errorbar 1600 volte ...

risposta

0

Si può usare l'argomento opzionale ecolor in pylab.errorbar come si utilizza l'argomento color in pylab.scatter:

pylab.errorbar(phase, y, yerr=err, fmt=None, marker=None, mew=0, ecolor=time) 
+0

@ Hooked, penso a caso vuole che i suoi/sue errorbars abbiano lo stesso colorare come i suoi punti di riferimento. La tua soluzione è buona poiché mette sotto i datapoints e migliora la chiarezza del grafico, ma non risolve il problema del colore della barra degli errori. –

+0

@ Moi Jaiunvelo: ho provato questo e non funziona per me, sfortunatamente. Potresti spiegare come ottenere la matrice temporale (tipo float ed eseguito tipicamente da [0, 2000.]) su un array ecolor valido? – Random

14

Oltre a modificare il colore, un altro suggerimento è di cambiare il zorder delle barre di errore rispetto al grafico a dispersione. Questo focalizza l'utente sui dati e disegna la forma generale degli errori (che credo sia la tua intenzione).

from pylab import * 

# Generate some random data that looks like yours 
N = 1000 
X = random(N) 
Y = sin(X*5) + X*random(N)*.8 
Z = random(N) 
ERR = X*random(N) 

# These are the new arguments that I used 
scatter_kwargs = {"zorder":100} 
error_kwargs = {"lw":.5, "zorder":0} 

scatter(X,Y,c=Z,**scatter_kwargs) 
errorbar(X,Y,yerr=ERR,fmt=None, marker=None, mew=0,**error_kwargs) 
xlim(0,1) 
show() 

enter image description here

+0

Grazie, Hooked! Non conoscevo il korder zorder. Anche se questa non è esattamente la risposta che speravo, lo farà per il momento. MoiJaiunvelo aveva ragione, idealmente mi piacerebbe avere i giradischi tracciati nello stesso colore dei datapoint. – Random

7

che stavo cercando la soluzione per un po 'e finalmente ho trovato un modo attraverso:

from pylab import * 

#data 
time = arange(100.) 
signal = time**2 
error = ones(len(time))*1000 

figure(1) 
#create a scatter plot 
sc = scatter(time,signal,s=20,c=time) 

#create colorbar according to the scatter plot 
clb = colorbar(sc) 

#create errorbar plot and return the outputs to a,b,c 
a,b,c = errorbar(time,signal,yerr=error,marker='',ls='',zorder=0) 

#convert time to a color tuple using the colormap used for scatter 
time_color = clb.to_rgba(time) 

#adjust the color of c[0], which is a LineCollection, to the colormap 
c[0].set_color(time_color) 

fig = gcf() 
fig.show() 
xlabel('time') 
ylabel('signal') 
+0

Ottima soluzione, ma per quanto riguarda il colore dei tappi? C'è un modo per aggiornare il colore dei tappi usando la mappa dei colori? – aim