web-dev-qa-db-ja.com

ファイルからある行までのデータをプロットするgnuplot

たとえば、10000行2列のテキストファイルにデータがあります。 plot "filename.txt" using 1:2 with linesで簡単にプロットできることを知っています。しかし、私が望むのは、単にプロットすることです。たとえば、1000から2000までの行またはその他の適切な選択です。簡単にできますか?事前にどうもありがとうございました。

34
YBE

より簡単:

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines
30
kev

Gnuplotの "every"コマンド が探しているもののようです:

plot "filename.txt" every ::1000::2000 using 1:2 with lines

または、ファイルを前処理して、目的の行を選択します。たとえば、awkを使用する場合:

awk "NR>=1000 && NR<=2000" filename.txt > processed.txt

次に、既存のgnuplotコマンド/スクリプトで結果の「processed.txt」を使用します。

77
Stuart Lange

おそらく、疑似列0を使用して、外部ユーティリティへの依存を排除​​できます(たとえば、システムにそれらがインストールされていない場合)。

見る help plot datafile using pseudocolumn

次のようなものを試してください:

LINEMIN=1000
LINEMAX=2000

#create a function that accepts linenumber as first arg
#an returns second arg if linenumber in the given range.
InRange(x,y)=((x>=LINEMIN) ? ((x<=LINEMAX) ? y:1/0) : 1/0)

plot "filename.txt" using (InRange($0,$1)):2 with lines

(Gnuplot 4.4.2、Linuxでテスト済み)

9
mgilson

GnuplotはNaN値を無視します。これは、x座標の指定された範囲で機能します。ただし、行範囲の指定方法がわかりません。

cutoff(c1,c2,xmin,xmax) = (c1>=xmin)*(c1<=xmax) ? c2 : NaN
plot "data.txt" u 1:(cutoff(($1),($2),1000,2000))
1

sedgrep、_bashなどのコマンドラインツールをお勧めします。あなたの例では

head -n 2000 ./file.data > temp.data

そして

tail -n 1000 temp.data > temp2.data

動作する可能性があります。しかし、そのような大きな数値が頭と尾で機能するかどうかはテストしていません。

0
BREMI