2012-04-18 22 views
13

Mam serię danych czasowych, dla których mam ilość, y i jej błąd, yerr. Chciałbym teraz utworzyć wykres pokazujący y względem fazy (tj. Czas/okres% 1) z pionowymi listami błędów (yerr). Do tego używam zazwyczaj pyplot.errorbar (time, y, yerr = yerr, ...)Colormap dla belek błędu na wykresie punktowym x-y przy użyciu matplotlib

Chciałbym jednak użyć koloru/mapy do wskazania wartości czasu na tym samym wykresie.

Co zatem zrobić, jest następujący:

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

Niestety, ten będzie wykreślić unicolored errorbars (domyślnie jest to kolor niebieski). Ponieważ mam ~ 1600 punktów na wykres, powoduje to, że mapa kolorów wykresu rozproszonego zniknie za pasami błędów. Oto obraz pokazuje, co mam na myśli:

enter image description here

Czy istnieje sposób, że mogę uzyskać słupki błędów zostać wykreślone przy użyciu tego samego colormap jak ta stosowana w wykres punktowy? Nie chcę zadzwonić errorbar 1600 razy ...

Odpowiedz

0

może używać ecolor opcjonalny argument w pylab.errorbar jak użyć color argument w pylab.scatter:

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

@ Hooked, myślę Losowe chce jego/jej errorbars mieć takie same kolor jako jego/jej punkty danych. Twoje rozwiązanie jest dobre, ponieważ umieszcza paski błędów poniżej punktów danych i poprawia przejrzystość wykresu, ale nie rozwiązuje problemu z kolorem paska błędów. –

+0

@ Moi Jaiunvelo: Próbowałem tego i nie działa to niestety dla mnie. Czy mógłbyś wyjaśnić, jak uzyskać tablicę czasu (typ float i działa zwykle od [0, 2000.]) do poprawnej tablicy ecolor? – Random

14

Oprócz zmiany koloru, kolejna sugeruje się zmianę zorder słupków błędów względem wykresu rozproszenia. Skupia on użytkownika na danych i wyciąga ogólny kształt błędów (które według ciebie są twoją intencją).

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

Dzięki, Hooked! Nie wiedziałem o Zorg kwarg. Chociaż nie jest to dokładnie odpowiedź, na którą liczyłem, zrobi to na razie. MoiJaiunvelo miał rację, najlepiej chciałbym, aby paski błędów były drukowane w tym samym kolorze co punkty danych. – Random

7

Szukałem rozwiązania na chwilę, a ja w końcu znaleźć drogę:

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

Świetne rozwiązanie, ale co z kolorem czapek? Czy istnieje sposób aktualizacji koloru kapsli za pomocą mapy kolorów? – aim