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
Функция colorSet(name, rgb)
и `colorGet (имя) будут создавать и переменный доступ с именами вида color_green, color_red, ... Значение этих переменных соответствующие значения rgb.
Вы можете определить цвета по своему усмотрению, имя не должно содержать дефис. Внутренние определения цвета gnuplot показаны командой show colors
.
Я не ожидал определить свою собственную функцию преобразования. Будучи определяемыми именами цветов, я думал, что это будет проще. Но спасибо @maij, который решил мою проблему. – ACR