Gnuplot에서 두 플롯의 특정 행을 그리는 방법은 무엇입니까?

Gnuplot에서 두 플롯의 특정 행을 그리는 방법은 무엇입니까?

데이터

ID      BlockSize Size      Blocks
-       511.991   241520288  471728
001     511.868   24152000   47184
0001    503.2     241520     480
00001   510.829   2415200    4728
000001  511.360   4782240    9352
0000001 486.935   120760     248
000     511.889   24103840   47088
0000    493.265   193360     392
00000   511.019   2367040    4632
000000  511.262   4830400    9448
0000000 483.4     96680      200

내가 원하는 곳

  • 3:4열은 플롯팅에 사용됩니다.
  • 2:6 행에서 그래프 그리기
  • 또 다른 시작은 7:11입니다

이걸 토대로 시작했어요블로그 게시물

set terminal qt; 
plot "<(sed -n '2,6p' sandboxgp.data)" using 3:4 with lines; 
plot "<(sed -n '7,11p' sandboxgp.data)" using 3:4 with lines;

단지 그래프를 제공할 뿐입니다.

마르코의 결과물

명확성을 위해 y축에 로그 눈금을 두었습니다. 일부 코드는 다음을 기반으로 합니다.답변

set terminal qt; 
plot "<(sed -n '2,6p' sandbox_gp_pure.data)" using 3:4 with linespoints; 
replot "<(sed -n '7,11p' sandbox_gp_pure.data)" using 3:4 with linespoints; 
set logscale y 10; 
set xlabel "Size"; set ylabel "log(Blocks)"; 
set grid xtics ytics mxtics mytics lc rgb 'blue' lt 1, lc rgb 'red' lt 1; set mxtics; set mytics 5; 
set out;

주다

여기에 이미지 설명을 입력하세요.

답변1

명령을 사용하지 말고 replot대신 쉼표를 사용하십시오.,
스크립트에서 해당 명령을 사용해야 할 뚜렷한 이유가 없기 때문에 replot간단히 쉼표를 사용하여 ,플롯하려는 두 곡선을 구분하는 것이 좋습니다 plot sin(x), cos(x).

좋은 습관이라고 생각하세요. 하지만 원칙적으로는 좀 더 다릅니다(아래 참조).
\ 한 줄을 마지막 문자로 나누는 것이 흥미로울 수도 있습니다 (그 뒤에는 공백이나 다른 문자가 필요하지 않습니다). 스크립트를 더 깔끔하게 만듭니다.

# ...
set style data linespoint   # To avoid to repeat it on each line of plot command
                            # Note below no spaces after the `\` 
plot "<(sed -n '2,6p'  sandbox_gp_pure.data)"  using 3:4  \
   , "<(sed -n '7,11p' sandbox_gp_pure.data)"  using 3:4 

replot대신 명령을 사용하세요각 곡선을 다시 그립니다.그래프에 이미 존재하며(데이터를 다시 읽고 다음 작업을 모두 다시 수행)뒤쪽에새로운 곡선을 그립니다.

이것은 좋은 습관이기 때문에내일 스크립트를 다시 사용하려면 일반천천히 해파일이 많거나 크거나 원격 파일 시스템에 있는 경우, 데이터를 처리하기 위해 긴 작업을 수행하는 경우 및 연결을 통해 작업하는 경우 창의 작업을 기다려야 하는 경우 업데이트할 그래픽 더보기 ssh -X...

또한 pdfcairo터미널 에서는

set terminal pdfcairo;  set output 'my.pdf' ;
  plot    sin(x) 
  replot  cos(x)
set output  ; set terminal qt # or whatever is your default terminal

2페이지짜리 문서와 더 큰 PDF 파일을 받게 됩니다.


every참고: 서브셸을 생성하거나 ()외부 프로그램을 호출 하지 않고도 이 키워드를 사용할 수 있습니다 sed.선주문그들과유형, 다음 스타일을 추가하여 smooth unique데이터 세트를 그릴 수 있습니다linespoints좋다좌표 별로 항목이 정렬됩니다 x.

plot "sandbox_gp_pure.data" every ::1::5   us 3:4 t "set 1" w linesp \
   , ''                     every ::6::10  us 3:4 t "set 2" w linesp

아니면 주문하고 싶으시다면

plot "sandbox_gp_pure.data" every ::1::5  u 3:4 smooth unique t "set 1" w linesp\
   , ''                     every ::6::10 u 3:4 smooth unique t "set 2" w linesp

sed또 다른 장점은 휴대성입니다. Windows 환경에서도 설치가 없는 경우에도 작동합니다.
당신은 알 수 있습니다전화 번호로 시작하기 때문입니다 0.

각 블록의 첫 번째 데이터는 파일의 첫 번째 블록과 마찬가지로 "0"으로 번호가 지정됩니다.


이것gnuplot help replot산출:

인수가 없는 명령은 replot마지막 plot또는 splot 명령을 반복합니다. 이는 set다양한 옵션이 포함된 플롯을 보거나 여러 장치에 대해 동일한 플롯을 생성할 때 유용합니다.

명령 뒤에 지정된 매개변수 replot는 마지막 plot또는 splot명령(암시적 "," 구분 기호 포함) 반복하기 전에.

답변2

replot대신 plot두 번째 플롯을 사용하십시오 . 그러면 첫 번째 플롯을 덮어쓰지 않습니다.

# will plot one graph
gnuplot -p -e 'plot sin(x); plot cos(x)'

# will plot two graphs
gnuplot -p -e 'plot sin(x); replot cos(x)'

관련 정보