2013-02-21 2 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에서 나온 점은 모두 빨간색으로 그려야합니다. 마지막으로, optimal_data.dat 파일에있는 포인트는 파란색으로 그려야합니다. 이 파일들에있는 포인트들이 실행 가능해야한다는 것은 말할 필요도 없습니다.

@ andyras의 솔루션을 사용하여 문제의 첫 번째 부분을 해결할 수있었습니다. 그러나 다른 파일을 동일한 플롯에 통합하면 모든 포인트가 회색으로 바뀌 었습니다. 팔레트 등을 재정의했지만, 실행 불가능하고 최적이 아닌 점을 회색과 빨간색이 아닌 파란색과 빨간색으로 표시 할 수있었습니다. 최적의 색상을 검정색으로 그릴 수 있었지만 다른 색상을 사용할 수는 없습니다. 누군가가이 문제에 대한 팔레트 설정을 안내해 줄 수 있습니까?

는 I이 사용 된 (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" 

데이터 파일은 이전 사례와 동일한 형식입니다. X : Y : Z와 같이 2 : 1 : 3 순서로 처음 세 열을 사용해야합니다.

샘플 데이터 : 최적 점 :

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

OK, 해결책을 찾은 것 같습니다 (지연에 대해 유감스럽게 생각합니다).

enter image description here

#!/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))를 사용했기 때문이라고 생각한다. 이 함수는 두 개만 정의합니다. 방금 두 번째 비교기를 두 번째 데이터 파일에 사용하도록 정의했으며 제대로 작동하는 것 같습니다.

관련 문제