2016-10-23 4 views
2

Gibt es eine Möglichkeit, die Aufgabe des Zeichnens mehrerer Linien mit unterschiedlichen Farben zu vektorisieren/zu beschleunigen?Vektorisieren Plotten mehrerer Linien mit verschiedenen Farben in MATLAB?

Die Arbeits-but-langsame Annäherung ist

X = [1 2; 3 4]; 
Y = [2 -4; 5 2]; 
figure; 
hold on; 
colors = [1 0 0; 0 1 0]; 
for idx = 1:size(X, 2) 
    l = plot(X(:, idx), Y(:, idx), 'Color', colors(idx, :)); 
end 
hold off; 

I

versucht
X = [1 2; 3 4]; 
Y = [2 -4; 5 2]; 
figure; 
plot(X, Y, 'Color', [1 0 0; 0 1 0]); 

aber kein Glück.

+1

Kann derzeit nicht getestet werden, aber vielleicht können Sie versuchen, die Achsengrenzwerte vor dem Plotten einmal manuell festzulegen, damit Matlab nicht jedes Mal neu berechnet werden muss, wenn es neu berechnet werden muss; prüfe [this] (http://undocumentedmatlab.com/blog/plot-performance) Artikel von Yahir Altman und ein paar Tipps im Kommentar unter dem Text. Hoffe das hilft irgendwie! –

+1

Schauen Sie hier: http://stackoverflow.com/a/22029354/2778484 – chappjc

+0

Eine bekannte Verbesserung: Verwenden Sie die Low-Level-Funktion 'line' über' plot'. –

Antwort

2

Dies ist wahrscheinlich auch Hacky ein nützlicher Ersatz der Schleife zu sein, aber hier geht es:

set(gca, 'ColorOrder', [1 0 0; 0 1 0], 'NextPlot', 'add') 
plot(X, Y); 

Die 'ColorOrder' Eigenschaft enthält die Farben von Standard für neue Plots verwendet werden. Die Einstellung 'NextPlot' auf 'add' scheint erforderlich zu sein, damit der Aufruf von plot'ColorOrder' nicht auf seinen Standardwert zurücksetzt.

Getestet auf R2015b.

+0

+1; Vielen Dank! Fragen Sie sich, ob dies die Dinge wirklich schneller machen würde? Mein ultimatives Ziel ist es, Dinge zu beschleunigen (nicht nur Vektorisieren): -D –

+1

@SibbsGambling Nicht sicher über Geschwindigkeit, besser versuchen Sie in Ihrer Matlab-Version und spezifischen Fall. Aber die Schleife ist viel besser lesbar; Ich würde wahrscheinlich mit dem gehen –

+0

Oh, aber was ist, wenn meine Farben RGBA anstelle von RGB sind? Just probiert - 'set (gca, 'ColorOrder', colors);' nimmt nicht wirklich vier Spalten ein. –