Gnuplot의 데이터 곡선 아래 여러 섹션 채우기
문제
나는 부드러운 베 지어로 플롯하려는 곡선을 정의하는 일련의 점 "데이터"를 가지고 있습니다.그래서 저는 x 값 쌍 사이의 곡선 아래 영역을 채우고 싶습니다.x 값 쌍이 하나만 있는 경우에는 새로운 데이터 세트를 정의하고 fillcu로 플롯하기 때문에 그리 어렵지 않습니다.예:
문제는 같은 플롯에서 여러 번 그렇게 하고 싶다는 것입니다.
편집하다:최소한의 작업 예:
#!/usr/bin/gnuplot
set terminal wxt enhanced font 'Verdana,12'
set style fill transparent solid 0.35 noborder
plot 'data' using 1:2 smooth sbezier with lines ls 1
pause -1
'데이터'의 구조는 다음과 같습니다.
x_point y_point
그리고 내 문제는 실제로 곡선 하나도 채울 수 없으며 기울기가 거의 일정하기 때문에 채워지는 것 같다는 것입니다.
해결책
곡선 아래 부분을 채우려면 다음을 사용해야 합니다. filledcurves
스타일.옵션으로는 x1
곡선과 x축 사이의 부분을 채웁니다.
곡선의 일부만 채우려면 데이터를 필터링해야 합니다.x 값에 다음 값을 지정합니다. 1/0
(잘못된 데이터 포인트) 원하는 범위를 벗어나면 그렇지 않으면 데이터 파일의 올바른 값입니다.마지막에는 곡선 자체를 플롯합니다.
set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
'' using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
'' using 1:2 with lines lw 3 lt 1 title 'curve'
이렇게 하면 범위가 채워집니다. [-1:0.5]
그리고 [0.2:0.8]
.
실제 예를 들기 위해 특수 파일 이름을 사용합니다. +
:
set samples 100
set xrange [-2:2]
f(x) = -x**2 + 4
set linetype 1 lc rgb '#A3001E'
set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot '+' using (filter($1, -1, -0.5)):(f($1)) with filledcurves x1 lt 1 notitle,\
'' using (filter($1, 0.2, 0.8)):(f($1)) with filledcurves x1 lt 1 notitle,\
'' using 1:(f($1)) with lines lw 3 lt 1 title 'curve'
결과(4.6.4 사용):
일종의 평활화를 사용해야 하는 경우 필터는 필터링된 부분에 따라 데이터 곡선에 다르게 영향을 미칠 수 있습니다.먼저 평활화된 데이터를 임시 파일에 쓴 다음 이를 '일반' 플로팅에 사용할 수 있습니다.
set table 'data-smoothed'
plot 'data' using 1:2 smooth bezier
unset table
set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data-smoothed' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
'' using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
'' using 1:2 with lines lw 3 lt 1 title 'curve'
제휴하지 않습니다 StackOverflow