2012-04-18 15 views
13

Ich habe eine Zeitreihe von Daten, für die ich die Menge, y, und seinen Fehler, yerr haben. Ich möchte nun ein Diagramm erstellen, das Y gegen Phase (d. H. Zeit/Periode% 1) mit vertikalen Fehlerbalken (yerr) anzeigt. Dazu benutze ich normalerweise pyplot.errorbar (time, y, yerr = yerr, ...)Colormap für Fehlerbalken in x-y Streudiagramm mit Matplotlib

Allerdings würde ich gerne eine colorbar/map verwenden, um den Wert der Zeit in diesem gleichen Diagramm anzuzeigen.

Was ich damit tun, ist die folgende:

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

Leider wird diese einfarbige Fehlerbalken plotten (Standard ist blau). Da ich ~ 1600 Punkte pro Diagramm habe, verschwindet die Farbpalette des Streudiagramms hinter den Fehlerbalken. Hier ist ein Bild zeigt, was ich meine:

enter image description here

Gibt es eine Möglichkeit, dass ich die Fehlerbalken bekommen werden mit dem gleichen colormap wie die geplottet im Streudiagramm verwendet? Ich will nicht errorbar 1600 mal anrufen ...

Antwort

0

Sie können das ecolor optionale Argument in pylab.errorbar verwenden, wie Sie das color Argument in pylab.scatter verwenden:

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

@ Hooked, ich glaube Zufall sein/ihr Fehlerbalken will das gleiche haben Farbe als seine/ihre Datenpunkte. Ihre Lösung ist gut, da sie Fehlerbalken unter Datenpunkte platziert und die Übersichtlichkeit des Diagramms verbessert. Das Problem mit der Fehlerbalkenfarbe wird jedoch nicht behoben. –

+0

@ Moi Jaiunvelo: Ich habe das versucht und es funktioniert leider nicht für mich. Könntest du bitte erklären, wie man das Zeit-Array (Typ float und läuft typischerweise von [0, 2000]) zu einem gültigen Ecolor-Array bringt? – Random

14

Neben den Farbwechsel, eine andere Vorschlag ist, die zorder der Fehlerbalken gegen das Streudiagramm zu ändern. Dies fokussiert den Benutzer auf die Daten und zeichnet die allgemeine Form der Fehler auf (was ich für Ihre Absicht halte).

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

Danke, gehakt! Ich wusste nichts über den Zorder Kwarg. Obwohl dies nicht genau die Antwort ist, auf die ich gehofft hatte, wird es für den Moment reichen. MoiJaiunvelo hatte Recht, idealerweise möchte ich die Fehlerbalken in der gleichen Farbe wie die Datenpunkte gezeichnet haben. – Random

7

Ich war für die Lösung für eine Weile suchen und ich fand schließlich einen Weg durch:

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

Tolle Lösung, aber wie wäre es mit der Farbe der Kappen? Gibt es eine Möglichkeit, die Farbe der Caps mit der Colormap zu aktualisieren? – aim

Verwandte Themen