문제

나는 부드러운 베 지어로 플롯하려는 곡선을 정의하는 일련의 점 "데이터"를 가지고 있습니다.그래서 저는 x 값 쌍 사이의 곡선 아래 영역을 채우고 싶습니다.x 값 쌍이 하나만 있는 경우에는 새로운 데이터 세트를 정의하고 fillcu로 플롯하기 때문에 그리 어렵지 않습니다.예:

example of what I want to do

문제는 같은 플롯에서 여러 번 그렇게 하고 싶다는 것입니다.

편집하다:최소한의 작업 예:

#!/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 사용):

enter image description here

일종의 평활화를 사용해야 하는 경우 필터는 필터링된 부분에 따라 데이터 곡선에 다르게 영향을 미칠 수 있습니다.먼저 평활화된 데이터를 임시 파일에 쓴 다음 이를 '일반' 플로팅에 사용할 수 있습니다.

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'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top