2

csv ファイルの列数を返す gnuplot の関数はありますか? ドキュメントには何も見つかりません。誰かがカスタムメイドの関数を提案できますか?

4

2 に答える 2

5

gnuplot4.6 では、これを行うための小さなハック スクリプトを作成できます。これは確かに最も効率的ではありませんが、純粋な gnuplot です:

#script col_counter.gp
col_count=1
good_data=1
while (good_data){
   stats "$0" u (valid(col_count))
   if ( STATS_max ){
      col_count = col_count+1
   } else {
      col_count = col_count-1
      good_data = 0
   }
}

メインスクリプトで、

call "col_counter.gp" "my_datafile_name"
print col_count   #number of columns is stored in col_count.

これにはいくつかの制限があります。たとえば、データファイルに完全に数値以外の列があり、その後にさらに有効な列が続く場合はチョークしますが、多くの典型的なユースケースで機能するはずです。

print col_count

最後の注意として、環境変数を使用することができ、現在のディレクトリにあるGNUPLOT_LIB必要さえありません。col_counter.gp

于 2012-11-14T15:00:40.240 に答える
4

これがこの質問に関連していると仮定し、 infile.csvの内容は次のとおりです。

n,John Smith stats,Sam Williams stats,Joe Jackson stats
1,23.4,44.1,35.1 
2,32.1,33.5,38.5 
3,42.0,42.1,42.1 

次のようにできます。

プロット.gp

nc = "`awk -F, 'NR == 1 { print NF; exit }' infile.csv`"
set key autotitle columnhead
set datafile separator ','
plot for [i=2:nc] "< sed -r '1 s/,([^ ]+)[^,]+/,\\1/g' infile.csv" using 1:i with lines

Gnuplot\1内で使用する場合はエスケープする必要があることに注意してください。"

出力:

データ ファイル プロット

于 2012-11-14T08:27:05.427 に答える