2016-05-19 14 views
0

Angenommen, ich habe eine Situation wie folgt:MATLAB: Streudiagramm von dem jeder Punkt eine eigene Farbe hat

clc; clear; 
n = 1001; 
m = 1000; 
X  = linspace(0,1,n); 
Y  = linspace(0,1,n); 
randcolor = rand(m,3); 
colorcode = randi(m,m,m); 

Für i = 1, ..., n und j = 1, ...,n, ich möchte die Punkte plotten (X(i),Y(j)) ist, wo die RBG Farbe für (X(i),Y(j)) ist randcolor(colorcode(i,j),:). Ich habe versucht, dies die dumme Art und Weise zu tun: zuerst

figure; hold on; 

dann tun 2 verschachtelten Schleifen deklarieren, n Schritten jeweils, und verwenden Sie plot einen einzigen Punkt nxn mal zu zeichnen:

for i = 1:n 
    for j = 1:n 
     plot(X(i),Y(j),'Marker','o',... 
      'MarkerEdgeColor',randcolor(colorcode(i,j),:),... 
      'MarkerFaceColor',randcolor(colorcode(i,j),:)); 
    end 
end 

Diese technisch funktioniert, aber Es war langsam und MATLAB verschlang mein gesamtes Gedächtnis, wenn n erhöht wurde. Was ist ein besserer Weg, dies bitte zu tun?

p.s. In meinem aktuellen Problem ist colorcode nicht wirklich nach dem Zufallsprinzip zugewiesen. Es wird vielmehr basierend auf einem Divergenzkriterium für einen gefüllten Julia-Satz zugewiesen.

Antwort

1

Sie möchten scatter anstelle von plot verwenden, mit dem Sie die Größe und Farbe jedes Punktes einzeln festlegen können.

colors = rand(numel(X), 3); 
S = scatter(X, Y, 100, colors); 
+0

Danke. Ich musste deine Antwort ein wenig mit Meshgrid für meinen Zweck ändern, aber der Vorschlag der Streuung ist richtig. – yurnero