2016-11-28 2 views
1

Есть ли способ использовать имя цвета вместо его шестнадцатеричного значения или тройки RGB, чтобы изменить цвет графика? Мне нужно similar to the first answer in this post. Мои исходные данные (input.dat) выглядит следующим образом:Проблема с именами цветов RGB

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

Простой тест:

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

ответ

0

lc rgb variable преобразует любые строки в целые числа, прежде чем оценивать их цвет, и это не будет преобразуйте строку «красный» в число 0xff0000. Поэтому мы должны определить нашу собственную функцию преобразования.

Вы можете использовать эту идею из ответа https://stackoverflow.com/a/35729052/7010554. Вот возможная реализация:

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

Функция colorSet(name, rgb) и `colorGet (имя) будут создавать и переменный доступ с именами вида color_green, color_red, ... Значение этих переменных соответствующие значения rgb.

Вы можете определить цвета по своему усмотрению, имя не должно содержать дефис. Внутренние определения цвета gnuplot показаны командой show colors.

+0

Я не ожидал определить свою собственную функцию преобразования. Будучи определяемыми именами цветов, я думал, что это будет проще. Но спасибо @maij, который решил мою проблему. – ACR

Смежные вопросы