有什么方法可以使用颜色名称而不是十六进制值或RGB三元组来改变我的情节颜色?我需要的是similar to the first answer in this post。我的输入数据(input.dat)如下:
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 :(得分:0)
lc rgb variable
会将任何字符串转换为整数,然后再将它们计算为颜色,这不会转换字符串" red"进入数字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(name)将创建和访问名称为color_green,color_red,...的变量。这些变量的值是相应的rgb值。
您可以根据需要定义颜色,名称不得包含连字符。 gnuplot内部颜色定义由命令show colors
显示。