2012-04-18 17 views
13

Tengo una serie temporal de datos para los cuales tengo la cantidad, y, y su error, yerr. Ahora me gustaría crear un gráfico que muestre y contra la fase (es decir, tiempo/período% 1) con barras de error verticales (yerr). Para esto, normalmente uso pyplot.errorbar (time, y, yerr = yerr, ...)Mapa de color para barras de error en un diagrama de dispersión x-y usando matplotlib

Sin embargo, me gustaría usar una barra de colores/mapa para indicar el valor del tiempo en este mismo diagrama.

Lo que por lo tanto lo que hago es la siguiente:

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

Desafortunadamente, esto va a trazar errorbars unicolor (por defecto es azul). Como tengo ~ 1600 puntos por parcela, esto hace que el mapa de colores del diagrama de dispersión desaparezca detrás de las barras de error. Aquí hay una foto muestra lo que quiero decir:

enter image description here

¿Hay una manera que puedo conseguir las barras de error a ser trazado con el mismo mapa de colores como la utilizada en el diagrama de dispersión? No quiero llamar errorbar 1600 veces ...

Respuesta

0

Usted puede utilizar el argumento opcional ecolor en pylab.errorbar y cuando se utiliza el argumento color en pylab.scatter:

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

@ enganchado, creo aleatoria quiere que sus/sus errorbars tengan la misma color como sus puntos de datos. Su solución es buena ya que pone las barras de error por debajo de los puntos de datos y mejora la claridad del gráfico, pero no soluciona el problema de color de la barra de error. –

+0

@ Moi Jaiunvelo: Lo he intentado y no funciona para mí, desafortunadamente. ¿Podría explicar cómo obtener la matriz de tiempo (escriba float y se ejecuta normalmente desde [0, 2000.]) a una matriz ecolor válida? – Random

14

Además de cambiar el color, otro la sugerencia es cambiar el zorder de las barras de error frente al diagrama de dispersión. Esto enfoca al usuario en los datos y dibuja la forma general de los errores (que creo que es su intención).

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

¡Gracias, Enganchado! No sabía sobre el zorder kwarg. Aunque esta no es exactamente la respuesta que esperaba, lo hará por el momento. MoiJaiunvelo tenía razón, idealmente me gustaría tener las barras de error trazadas en el mismo color que los puntos de datos. – Random

7

que estaba buscando la solución por un tiempo y finalmente he encontrado un camino a través de:

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

Gran solución, pero ¿qué tal el color de las tapas? ¿Hay alguna forma de actualizar el color de las mayúsculas con el mapa de colores? – aim

Cuestiones relacionadas