我创建的堆叠图表在单个数据文件上提供x轴年数,请参阅gnuplot stacked filledcurves can't show the corrects sum。
但我想从不同日期的多个数据文件中进行更改和收集 这是我之前的图表
我有多个日期格式的数据文件。即:
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'
你能告诉我,如何更改我的脚本以支持多个数据文件?谢谢!
答案 0 :(得分:2)
单独读取所有文件,如:
file1 = 'data.dat'
file2 = 'data2.dat'
然后逐个绘制它们,假设您拥有的文件数量是可管理的
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循环可能无法为您提供所需的绘图,因为曲线是相互绘制的,如果"最高"曲线绘制在最后,它将曲线整个图。
如果您的不同数据文件只有一些共同的时间戳,那么您可以准备相应的" trimmed"只有那些公共时间戳的文件(跨所有数据文件)。以下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