2016-11-28 1 views
1

Gibt es eine Möglichkeit, einen Farbnamen anstelle des Hexadezimalwerts oder RGB-Tripel zu verwenden, um meine Plotfarbe zu ändern? Was ich brauche, ist . Meine Eingangsdaten (input.dat) sind wie folgt:Problem mit RGB-Farbnamen

1 1 2 0 magenta 
1 2 2 0 red 
1 3 2 0 green 
1 4 2 0 black 

einfacher Test:

set xrange [0:10] 
set yrange [0:10] 
plot "input.dat" using 1:2:3:4:5 with vectors lw 3 lc rgb variable 

Antwort

0

Die lc rgb variable alle Saiten auf ganze Zahlen konvertieren, bevor sie zu einer Farbe zu bewerten und dies wird nicht wandle den String "rot" in die Zahl 0xff0000 um. Also müssen wir unsere eigene Konvertierungsfunktion definieren.

Sie können die Idee von Antwort https://stackoverflow.com/a/35729052/7010554 verwenden. Hier ist eine mögliche Implementierung:

colorSet(name, rgb) = sprintf("color_%s = %d", name, rgb) 
colorGet(name) = value(sprintf("color_%s", name)) 

eval colorSet("magenta", 0xff00ff) 
eval colorSet("red",  0xff0000) 
eval colorSet("green", 0x00ff00) 
eval colorSet("black", 0x000000) 
eval colorSet("dark_yellow", 0xc8c800) 

print colorGet("green") 
print color_green 

set xrange [0:10] 
set yrange [0:10] 
plot "input.dat" using 1:2:3:4:(colorGet(stringcolumn(5))) with vectors lw 3 lc rgb variable 

arrows with color names read from file

Die Funktionen colorSet(name, rgb) und `colorGet (Name) erstellen und Zugriffs Variablen mit Namen der Form COLOR_GREEN, Color_Navy, ... Die Werte dieser Variablen sind die entsprechenden rgb-Werte.

Sie können Farben beliebig definieren, der Name darf keine Bindestriche enthalten. Die internen Farbdefinitionen von gnuplot werden mit dem Befehl show colors angezeigt.

+0

Ich habe nicht erwartet, meine eigene Konvertierungsfunktion zu definieren. Da die Farbnamen definiert waren, dachte ich, es wäre einfacher. Aber danke @maij, das hat mein Problem gelöst. – ACR