假设我有一个x y z列的数据文件,如下所示:
-3.063052922487259 -3.141592741012573 401.3000000000000
-3.063052922487259 -3.063052922487259 1.290000000000000
-3.063052922487259 -2.984513103961945 0.920000000000000
-2.984513103961945 -3.141592741012573 0.100000000000000
-2.984513103961945 -3.063052922487259 10.80000000000000
-2.984513103961945 -2.984513103961945 1001.290000000000
-2.905973285436630 -2.984513103961945 514.4000000000000
-2.905973285436630 -2.905973285436630 131.0300000000000
-2.905973285436630 -2.827433466911316 129.3300000000000
z列中的值范围将定义数据点的颜色。例如,在z列上,如果值介于0.0和0.3之间,则数据点的颜色将设置为蓝色;如果在0.3和1之间,数据点的颜色将设置为橙色;如果在400到1000之间,数据点的颜色将设置为海军。
所以我写了一些像这样的代码:
set xrange [0:15]
set yrange [0:-15]
set zrange [0:1400]
set cbrange [0.001:1400]
set palette defined ( 0 "goldenrod", 0.3 "blue", 1 "orange", 2 "cyan", 4 "yellow", 10 "green", 20 "pink", 50 'gold', 100 'purple', 400 'navy', 1000 "red")
set palette maxcolors 11
unset key
unset surface
splot "DATA.dat" using 1:2:3 with image
哪个不起作用。有帮助吗?
进一步更新: 我真的想解释清楚为什么不起作用,但Stack Overflow不允许我进一步解释,因为它们要求我有10个声望点才能发布图像结果。所以由于缺乏声誉,我无法发布我的结果。但我确实修改了我的数据集,所以你现在可以看到xy-data是等距离的。
所以我只用文字而不是图像描述问题,这就是颜色框错了。根据我的代码,400到1000之间应该是海军蓝(只有一种颜色)。但是图像上的彩盒显示,在400到1000之间,有5种不同的海军色,从浅海军到深海军蓝。我怎么才能在400到1000之间只有一种海军蓝?
答案 0 :(得分:1)
maxcolors
选项在您的情况下无法正常工作,因为它只会离散底层颜色渐变。您可以使用test palette
命令查看实际调色板的外观:
set palette defined ( 0 "goldenrod", 0.3 "blue", 1 "orange", 2 "cyan", 4 "yellow", 10 "green", 20 "pink", 50 'gold', 100 'purple', 400 'navy', 1000 "red")
set palette maxcolors 11
test palette
您还必须记住,调色板定义中使用的数字不是cb
- 轴上的绝对值,但是值(在您的情况下从0到1000)映射到实际值cbrange(0.001到1400)。
为了获得具有恒定颜色值的区域,请执行以下操作:
set palette defined (0 "goldenrod", \
0 "blue", 0.3 "blue", \
0.3 "orange", 1 "orange", \
1 "cyan", 2 "cyan", \
2 "yellow", 4 "yellow", \
4 "green", 10 "green", \
10 "pink", 20 "pink", \
20 "gold", 50 "gold", \
50 "purple", 400 "purple", \
400 "navy", 1000 "navy", \
1000 "red", 1400 "red")
test palette