1

x 軸が 1 つのデータファイルの年数であることを示す積み上げグラフを作成しました。

しかし、日付の異なる複数のデータファイルから変更して収集したい。
これは私の以前のグラフです

グラフ

日付形式のデータファイルが複数あります。すなわち:

200808  1
201104  2
201106  2
201107  4
201108  2
201109  4
201110  3
201111  2
201112  4
201201  7

200901  1
201101  3
201102  2
201103  2
201104  2
201105  2
201106  5
201107  12
201108  5
201109  24
201110  14
201111  18
201112  9

月ごとにグラフを表示する必要があります。これは、単一のデータファイルを使用した私のグラフです。

set terminal png size 900, 300
set output "graphs.png"
set xdata time
set timefmt "%Y%m"
set xtics format "%b"
set grid
plot "data.dat" using 1:2 with lines lw 2 lt 3 title 'time'

複数のデータファイルをサポートするようにスクリプトを変更する方法を教えてください。ありがとう!

4

1 に答える 1

2

次のように、すべてのファイルを個別に読み取ります。

file1 = 'data.dat'
file2 = 'data2.dat'

そして、あなたが持っているファイルの数が管理可能であると仮定して、それらを1つずつプロットします

set terminal png size 900, 300
set output "graphs.png"
set xdata time
set timefmt "%Y%m"
set xtics format "%b"
set grid
plot file2 using 1:2 with filledcurve x1 lt 3 title 'time1',\
file1 using 1:2 with filledcurve x1 lt 4 title 'time2'

多数のファイルがあり、すべてが .dat で終わる場合は、次の操作を実行できます。

plot for [f in system("ls *.dat")] f using 1:2 with filledcurve x1 title(f)

ただし、曲線が相互に描画されるため、for ループでは目的のプロットが得られない可能性があり、「最も高い」曲線が最後に描画されると、プロット全体が湾曲することに注意してください。

スタッキングについて:

異なるデータ ファイルにいくつかの共通のタイムスタンプしかない場合は、(すべてのデータ ファイルにわたって) 共通のタイムスタンプのみを持つ、対応する「トリミングされた」ファイルを準備できます。次の bash スクリプトはそれを行います。

#!/bin/bash

tmp1="/tmp/tmp1$RANDOM"
tmp2="/tmp/tmp2$RANDOM"

cp data1.dat "$tmp1" # to start, assign one file to tmp1

for file in `ls *.dat`
do
    awk 'FNR==NR{a[$1]=$0;next}{if(b=a[$1]){print b}}' "$tmp1" "$file" | awk '{print $1}'  > "$tmp2"
    cp "$tmp2" "$tmp1"
done
cat "$tmp1" > common.dat # this will give you a file with all common timestamps

 # now trim all data files using the common.dat file generated in for loop above

for file in `ls *.dat`
do
    awk 'FNR==NR{a[$1]=$0;next}{if(b=a[$1]){print b}}' "$file" common.dat > trimmed_$file.dat
done
于 2014-06-06T03:51:52.273 に答える