Gnuplotで2つのプロットの特定の行を描画するには?

Gnuplotで2つのプロットの特定の行を描画するには?

データ

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カンマを使用してプロットしたい,2つの曲線を区別することをお勧めしますplot sin(x), cos(x)

良い習慣だと思います。しかし、原則としてはもう少し異なります(下記参照)。
\ 1行を最後の文字に分割するのは興味深いかもしれません(その後にスペースや他の文字は必要ありません)。スクリプトをよりきれいにします。

# ...
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代わりにplot2番目のプロットを使用してください。これは最初のプロットを上書きしません。

# 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)'

関連情報