2013-02-21 3 views
0

Это ответвление этого вопроса здесь, хотя и немного сложнее (или кажется).Построение нескольких файлов в Gnuplot условно

Using Gnuplot to plot point colors conditionally

Вот сделка. У меня есть два разных файла. Один файл имеет оптимальные точки данных, а один файл имеет неосуществимые и неоптимальные точки данных.

Файлы находятся в том же формате, что и в предыдущем вопросе, но я отправлю их позже.

Моя цель построить все на одном 3D-графике с импульсами (возможно).

Представьте, у меня есть ограничения, которые говорят, что Xvalue> 18, Yvalue < 20 и Zvalue> 65. Типичные диапазоны: X = [0:22], Y = [0: 500], Z = [0:85] (небольшие изменения с последнего поста).

Любые пункты, которые не соответствуют этим критериям, являются недопустимыми и должны быть нанесены серым цветом. Любые точки, которые соответствуют этим критериям, но находятся в файле non_optimal_file.dat HAVE, который будет отображаться красным цветом. И, наконец, точки, которые находятся в файле optim_data.dat, должны отображаться синим цветом. Само собой разумеется, что точки в этих файлах должны быть осуществимы.

Я использовал решение @ andyras и смог решить первую часть проблемы. Но когда я включил другой файл в тот же сюжет, он просто повернул все точки серыми. Я переопределил свою палитру и т. Д., Но смог получить неосуществимые и неоптимальные точки в синем и красном, а не сером и красном. Я смог нарисовать оптимальные в черном, но я не могу использовать какие-либо другие цвета. Может ли кто-нибудь помочь мне настроить палитру для этой проблемы?

Я использовал это:

набор палитры определен (0 0 0 1 1 1 0 0 2 1 0 0) # (голубой, желтый, красный)

>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 

я руководствовался, чтобы создать новый вопрос для этого, так как это было несколько иначе. И, следовательно, ответвление. Извините, если этого не сделать.

ответ

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' 

enter image description here

Я думаю, что делает этот сценарий, как вы описали; Я в основном путался относительно оптимального и неоптимального и т. Д. Я думаю, причина, по которой ваш сценарий не работал, заключается в том, что вы использовали один и тот же компаратор (isbig (x, y, z)), чтобы попытаться иметь три возможных результата, но функция определяет только два. Я просто определил второй компаратор для использования во втором файле данных, и он работает нормально.

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