2016-07-25 9 views
2

Ich habe gerade Matlab lernen und ich möchte wissen, gibt es eine einfache Möglichkeit, die Farbe des Streudiagramms variieren, zum Beispiel von gelb nach rot. Ich dachte über den BefehlGraduate Matlab Plot von einer bestimmten Farbe zu einer anderen

scatter(x,y,100,c) 

wo c würde

t=linspace(0,1,100); 
c='y' .* (1-t) + 'r' .* t; 

nun etwas tut dies als RGB-Triplett definiert werden, aber es gibt die Farbe nicht wirklich nach und nach von Gelb nach Rot wechselt . Wenn es einen einfacheren Weg oder sogar eine benutzerdefinierte Funktion gibt, die das automatisch macht, wäre das großartig. Vielen Dank.

Antwort

1

Farben sind härter als das! Es gibt unendlich viele Möglichkeiten, von einer Farbe zu einer anderen zu wechseln, da Farbräume 3D-Volumen sind. Von allen möglichen Farbräumen ist RGB am schlechtesten für neue Farben oder Farbgestaltung geeignet!

Der Grund dafür ist, weil es keine Möglichkeit gibt zu wissen, welche Farbe [123, 213, 42] ist, und im Allgemeinen wird es keine Farbe zwischen [123, 213, 0] und [123, 213, 255] sein.

Die beste Option für Ihren Fall ist der HSV-Farbraum. Der erste Wert, Farbton, enthält alle Farbinformationen, während die anderen beiden die Sättigung und den Wert oder die Intensität der Farbe darstellen. Lies einfach den ersten Wert, von dem du weißt, mit welcher Farbe du sprichst.

in HSV, rot ist H=0 und gelb ist H=60 Grad, oder H=60*255/360 in Uint8 oder H=60/255 in Doppel. Wählen Sie einen S- und V-Wert, der für Sie geeignet ist, z. S = 255, V = 255, um intensive Farben zu haben. Dann:

H=linspace(0,60/255,100); 
HSV=[H;ones(size(H));ones(size(H))]; 
rgb=hsv2rgb(HSV); 

Dies wird Ihnen eine Farbkarte der Farben geben. Dann müssen Sie sie richtig in scatter

+0

zuweisen Vielen Dank für Ihre Antwort. Das sieht gut aus, aber 'rgb' hat nicht die richtige Dimension. Während die Variable "HSV" 100 Tripel hat, hat "rgb" nur drei. Ich habe erwartet, dass der Befehl 'hsv2rgb' auf den Ausdruck angewendet wird und 100 Triplets in RGB erzeugt, die ich dann leicht an 'streuen' übergeben kann. Fehle ich etwas? – learner271

+0

@ learner271 ja, tut es. Es gibt wahrscheinlich eine Größe oder etwas, das Sie vermissen –