web-dev-qa-db-ja.com

Gnuplotで1つのファイルからタイトルを持つ複数のデータセットをプロットする方法は?

次のようなファイルがあると仮定します。

"p = 0.1"
1 1
3 3
4 1


"p = 0.2"
1 3
2 2
5 2

Gnuplotでこれらの2つのデータセットを1つのプロットにプロットし、各データセットの最初の行にタイトルを付けることは可能ですか?

29
gTcV

それは間違いなく可能であり、データファイルはすでに正しい形式です。探している機能はcolumnheader(N)に組み込まれており、N番目の列の上部にあるデータを読み取り、それをプロットタイトルとして使用します。

 plot 'test.dat' i 0 u 1:2 w lines title columnheader(1),\
      'test.dat' i 1 u 1:2 w lines title columnheader(1)

反復を使用して凝縮できます:

plot for [IDX=0:1] 'test.dat' i IDX u 1:2 w lines title columnheader(1)
36
mgilson

これは Bruce_Warrior's および Ciro Santilli's の答えですが、中間のstatsなし:

# plot.gpi
datafile = ARG1
plot for [i=0:*] datafile index i using 1:2\
with lines title columnheader(1)

forループは、ファイル内のすべてのデータセットを直接反復処理できます。 gnuplot 5.0.5で動作しますが、いつforがこの機能を獲得したのかわかりません。 5.0マニュアル に文書化されていますが、 4.6マニュアル ではありません。

linecolor variable(ブルースの答えによる)によって消費される3番目の入力列によって線の色を決定する必要がある場合を除き、gnuplotは異なる色と線のスタイルを自動的に割り当てます。この特定のケースでは、using 1:2も省略できます。

$ gnuplot --version
gnuplot 5.0 patchlevel 5
$ gnuplot --persist -c plot.gpi test.dat

Plot de

test.dat

"p = 0.1"
1 1
3 3
4 1


"p = 0.2"
1 3
2 2
5 2
6
mkjeldsen

すべてのプロセスを自動化するために、andyras( answer 1 および answer 2 )によって与えられた回答に基づくソリューションを使用することです:

datafile = 'test.dat'
stats datafile
plot for [IDX=1:STATS_blocks] datafile index (IDX-1) u 1:2 w lines t\ 
columnheader(1) lc variable

これにより、スクリプトはデータブロックの数を自動的に検出し、各データブロックの最初の行に定義された対応するタイトルで異なる色でプロットします。

4
Bruce_Warrior

gnuplot 5.1(2016/08/28)

これは https://stackoverflow.com/a/29495496/895245 に似ていますが、以降のバージョンにいくつかの修正が加えられています。

脚本:

datafile = 'test.dat'
stats datafile nooutput
plot for [IDX=0:STATS_blocks-1] \
    datafile \
    index IDX \
    using 1:2 \
    with lines \
    title columnheader(1)

テストデータ:

a
1, 1
2, 2
3, 3


"b"
1, 1
2, 4
3, 9


"c, c"
1, 1
2, 8
3, 27

出力:

これは2016/08/28で機能し、後で5.1になりますが、5.0.3(Ubuntu 16.04)では機能しません。これは、5.0.3では、列ヘッダーが有効なデータではないためstatsコマンドがエラーを出すためです。そして2016/08/28にそれは単なる警告になりました。

警告を削除する方法を尋ねました: https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/Pi4aBE2PwZ8

次のようなコメントを使用します。

#a
1, 1
2, 2
3, 3

私がテストしたどちらのバージョンでも動作しませんでしたが、無視されます。

データセットをわずかに変更して(タイトルがコメントとして提供されるように):

#"p = 0.1"
1 1
3 3
4 1


#"p = 0.2"
1 3
2 2
5 2

次のように、これら2つのデータセットを別々の行としてプロットできます。

plot 'data.dat' i 0 t "p = 0.1", '' i 1 t "p = 0.2"

Plotコマンドのindex(略してi)オプションは、gnuplotにithデータセットをプロットするよう指示します。 gnuplotでヘッダーからタイトルを自動的に取得する方法が見つからないため、title(略してt)オプションを使用して手動でタイトルを指定しました。

1
andyras