2012-11-22 4 views
12

채우기 색상이 2 차원 플롯의 두 곡선 사이의 차이를 나타낼 수 있도록 gnuplot의 filledcurves 옵션에 대한 fillstyle을 변경하려고했습니다. 나는 이것을 위의 "filledcurves above/below"옵션의 확장으로 생각하고 있는데, 위 또는 아래를 나타내는 두 가지 색상 대신에 색상 범위 또는 팔레트가 있습니다.Gnuplot fillcurves with palette

다음은 위/아래 채우기 곡선 스타일을 사용하여 데이터 파일에서 작성하고자하는 플롯의 예입니다. 두 곡선 사이의 y- 차이를 나타내는 색 막대가 매우 유용합니다.

http://i.stack.imgur.com/RLlpU.png

내가 네 번째 열을 받아 나타나지 않습니다

plot 'data.txt' using 1:2:3:($3-$2) with filledcurves fs palette 

하지만 filledcurves 즉 사용하여 명령에 네 번째 열을 추가하여이 작업을 수행하기 위해 노력했다 ... 나는 또한 고려했다 변수 rgb 시도하지만이 중 하나를 작동하지 않는 것.

+2

이것은 기능 요청 (http://sourceforge.net/tracker/?group_id=2055&atid=352055)에 대한 작업처럼 보입니다. 나는 gnuplot이 당신이 기본적으로 원하는 것을 할 수 있다고 생각하지 않습니다. 그것이 구현되기 전까지는 뜨겁거나 차가운 상태 스펙트럼의 차이를 플롯에 별도의 선으로 그려 보는 것에 대해 생각할 수 있습니다. (인쇄물에서 더 잘 표현할 수 있고, 색맹 인 경우 조금 이해하기 쉬울 것입니다.) – andyras

+0

충분하다고 생각하지는 않았지만'set view map ','splot' 그리고'pm3d' ... – mgilson

+0

이것은 당신이 찾고있는 것과 같습니다. http://gnuplot-tricks.blogspot.com/2009/08/filled-curves-in-gnuplot.html –

답변

-2

트릭은 선을 그어 그 사이에 filledcurves으로 채우는 것입니다. 여기합니다 (examples at gnuplot 기준)을 수행하는 방법은 다음과 같습니다

set style line 2 lc rgb 'forest-green' 
set style line 3 lc rgb 'plum' 
set style fill pattern 5 lc 'yellow' 
set xrange [0:3000] 
set yrange [0:1] 
plot 'data.txt' u 1:2:3 w filledcurves notitle, \ 
    '' u 1:2 ls 2 with lines notitle, \ 
    '' u 1:3 ls 3 with lines notitle 

출력은 다음과 같습니다 데이터 파일이 더미 값을 포함 enter image description here

(즉, 두 번째 그래프와 유사) :

500  0.90 0.90 
1000 0.90 0.75 
1500 0.92 0.40 
2000 0.95 0.30 
2500 0.94 0.23 
4

채우기 커브에 linecolor rgb variable을 사용할 수 있도록 gnuplot 용 패치를 가지고 놀고 있습니다. 그런 다음, 다음의 gnuplot 코드를 사용할 수 있습니다 : 제가 제대로 질문을 이해 알고하지 않기 때문에 내가 패치를 제출, 아직하지 않은 enter image description here

이 결과를 제공

max_color=1 
# for a datafile one could extract the maximum diffference with e.g. 
# stats 'hotcold.dat' using 1:($3-$2) 
# max_color = (abs(STATS_min_y) > abs(STATS_max_y)) ? abs(STATS_min_y) : abs(STATS_max_y) 

red(val) = (val < 0 ? abs(1+val/max_color) : 1) 
green(val) = (1 - abs(val)/max_color) 
blue(val) = red(-val) 
rgb(val) = 65536*int(255*red(val)) + 256*int(255*green(val)) + int(255*blue(val)) 

set yrange[0:1] 
set xrange[400:2500] 
set samples 200 

fhot(x) = 0.1*exp(-((x-400)/200)**2) + 0.8*exp(-((x-2000)/300)**2) 
fcold(x) = 0.25*exp(-((x-700)/100)**6)+ 0.4 - (2e-4*(x-2500))**2 
plot '+' using 1:(fhot($1)):(fcold($1)):(rgb(fhot($1)-fcold($1))) with filledcurves lc rgb var t '',\ 
    '' using 1:(fhot($1)) with lines lw 4 lc rgb rgb(max_color) t 'Hot',\ 
    '' using 1:(fcold($1)) with lines lw 4 lc rgb rgb(-max_color) t 'Cold' 

내가 모든 사건을 다 다루었는지 모르겠다. 따라서 미세 조정이 필요할 수 있습니다.

+0

패치는 어떻게되어 가고 있습니까? 어딘가에 업로드 했니? 쓸모있어? – rgcalsaverini

+0

@rgcalsaverini 아니요, 업로드하지 않았습니다.나는 그것을 재미있게 썼지 만, 그런 그래픽이 필요 없기 때문에, 내가 뭔가를 놓친다면 그것이 올바른 접근법인지 나는 몰랐다. 그리고 그것에 대한 피드백을 전혀 얻지 못했기 때문에 나는 최초의 기본 구현으로 중단되었습니다. – Christoph

+1

멋진 패치! 이 해결책은 적어도 질문에있는만큼 upvotes를 가치가있다! ;) –

0

채워진 히스토그램을 사용해보십시오.

set style fill solid 1.0 
plot \ 
datafile u 1:2:3 lt palette w boxes,\ 
datafile u 1:2:3 lt palette lw 2 w l 

열 3은 팔레트 설정에 따라 색상 채우기 색상을 정의하고 열 1과 2는 데이터 요소를 정의합니다. 또한 그래프 아래의 부품을 지우는 데 배경색 히스토그램을 사용할 수 있습니다.

저는 이미지를 추가하고 싶지만 낮은 평판 때문에 할 수 없습니다.