Mapa de colores para barras de errores en el diagtwig de dispersión xy usando matplotlib

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

Sin embargo, me gustaría usar una barra de colores / mapa para indicar el valor del tiempo en esta misma gráfica.

Lo que hago es lo siguiente:

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

Desafortunadamente, esto trazará barras de error de unicolor (el valor predeterminado es azul). Dado que tengo ~ 1600 puntos por gráfico, esto hace que el mapa de colores del gráfico de dispersión desaparezca detrás de las barras de error. Aquí hay una foto que muestra lo que quiero decir:

introduzca la descripción de la imagen aquí

¿Hay alguna forma en que pueda hacer que las barras de error se dibujen usando el mismo mapa de colores que el que se usa en el diagtwig de dispersión? No quiero llamar a la barra de errores 1600 veces …

Además de cambiar el color, otra sugerencia es cambiar el orden zorder de las barras de error en comparación con el diagtwig de dispersión. Esto enfoca al usuario en los datos y extrae 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() 

introduzca la descripción de la imagen aquí

Estuve buscando la solución por un tiempo y finalmente encontré la forma de hacerlo:

 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') 

Puede usar el argumento opcional de pylab.errorbar en pylab.errorbar como usa el argumento de color en pylab.scatter :

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

Siento haberlo investigado, pero solo he encontrado algo parecido y esta fue mi solución basada en respuestas anteriores.

Esto establece el marcador, las barras de error y las tapas como el mismo color en el mapa de colores:

 import matplotlib.pyplot as plt import numpy as np #data time = np.arange(100.) signal = time**2 error = np.ones(len(time))*1000 #create a scatter plot sc = plt.scatter(time,signal,s=20,c=time) #create colorbar according to the scatter plot clb = plt.colorbar(sc) #convert time to a color tuple using the colormap used for scatter time_color = clb.to_rgba(time) #loop over each data point to plot for x, y, e, color in zip(time, signal, error, time_color): plt.errorbar(x, y, e, lw=1, capsize=3, color=color)