0

这是这个问题的一个分支,尽管有点复杂(或者看起来)。

使用 Gnuplot 有条件地绘制点颜色

这是交易。我有两个不同的文件。一个文件具有最佳数据点,一个文件具有不可行和非最佳数据点。

这些文件的格式与上一个问题中的格式相同,但我稍后会再次发布它们。

我的目标是用脉冲(可能)在一个 3D 散点图上绘制所有内容。

想象一下,我有一个约束,即 Xvalue > 18、Yvalue < 20 和 Zvalue > 65。典型范围是 X=[0:22]、Y=[0:500]、Z=[0:85](从最后一个帖子)。

任何不符合此标准的点都是不可行的,必须以灰色绘制。满足此标准但来自 non_optimal_file.dat 的任何点都必须绘制为红色。最后,optimal_data.dat 文件中的点必须绘制为蓝色。不用说,这些文件中的点必须是可行的。

我正在使用@andyras 的解决方案,可以解决问题的第一部分。但是当我将另一个文件合并到同一个图中时,它只是把所有的点都变成了灰色。我重新定义了我的调色板等,但能够获得蓝色和红色的不可行和非最佳点,而不是灰色和红色。我能够用黑色绘制最佳颜色,但我无法使用任何其他颜色。有人可以指导我为这个问题设置调色板吗?

我用这个:

设置调色板定义 (0 0 0 1, 1 1 0 0, 2 1 0 0) # (blue, yellow, red)

 >splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 8 palette notitle, \
 >      '' using (1e6):1:1 with points pt 8 lc rgb 'blue' title 'Optimal non-pareto', \
 >      '' using (1e6):1:1 with points pt 8 lc rgb 'red' title 'Non-optimal',    
 "./8_77_pareto_data.dat" u 2:1:3:(isbig($2,$1,$3)) w i lt 3 lc rgb 'black' t "Optimal 
 pareto"

数据文件的格式与前一种情况相同。我需要按 2:1:3 的顺序使用前三列作为 X:Y:Z。

样本数据: 最佳点:

20      10.078509647223639      50      172
46      10.395137748213685      43      18
34      10.1846571593967        33      18
74      11.054241806019         42      18
34      11.472806910917914      30      92

非最佳/不可行点:

20      9.835854999471227       42      35
20      11.901179073913957      44      35
20      12.204287402540535      51      35
255     15.216006917180689      66      172
20      11.651167171495924      52      172
20      11.89284904845455       48      172

我被引导为此创建一个新问题,因为它略有不同。因此分支。抱歉,如果它没有完成。

4

1 回答 1

1

好的,我想我想出了一个解决方案(抱歉耽搁了)。

#!/usr/bin/env gnuplot

set terminal png
set output 'test.png'

# cutoffs for non-optimal points
bigx = 16; bigy = 400; bigz = 65
# big value to shift dummy points off of plot
shift = 1e6

# conditional for non-pareto
isbig(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 1 : 0
# conditional for pareto
isbig2(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 0 : 2

set palette defined (0 0.5 0.5 0.5,\
                     1 1.0 0.0 0.0,\
                     2 0.0 0.0 1.0) # (grey, red, blue)

unset colorbox

set xrange [0:20]; set yrange [0:500]; set zrange [0:100]

# plot commands for points use dummy points just to make key
# this is because there are multiple types of points coming from one file
splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 7 palette notitle, \
      'optimal.dat' using 2:1:3:(isbig2($2,$1,$3)) with points pt 7 palette notitle, \
      '' using (shift):(1):(1) with points pt 7 lc rgb 'blue' title 'optimal non-pareto', \
      '' using (shift):(1):(1) with points pt 7 lc rgb '#888888' title 'optimal pareto', \
      '' using (shift):(1):(1) with points pt 7 lc rgb 'red' title 'non-optimal'

在此处输入图像描述

我认为这个脚本就像你描述的那样;我主要对最佳与非最佳等感到困惑。我认为您的脚本不起作用的原因是您使用相同的比较器 (isbig(x,y,z)) 来尝试获得三种可能的结果,但是该函数只定义了两个。我刚刚定义了第二个比较器以在第二个数据文件上使用,它似乎工作正常。

于 2013-02-27T04:36:26.100 回答