我正在处理多个文件,我想从这些文件中绘制热图every ::121::600 using 3:25:43
。
有没有办法动态组合所有文件,以获得带有以下命令的热图:
set dgrid3d
splot '< cat data1.csv data2.csv data3.csv data4.csv' every ::121::600 using 3:25:43 w pm3d
我试过了,但似乎只有来自data1.csv的数据显示在图中。我在'
或,
做错了吗? awk
或sed
是一种选择吗?
我知道选项set table
但我更喜欢使用干净的bash命令选项来直接进行此操作。
是否有一个很好的资源可以通过一些gnuplot演示来查找所有unix命令?
到目前为止,感谢您的回复:
所以'
用于绘图命令:例如plot 'data1.csv' using 1:2 w l
将使用行从data1文件中对第2行打印第1行。这就是我在命令中习惯'
的原因。我找到了这个Site,其中嘿解释一些针对枪支的bash命令,但我仍然没有找到我正在寻找的东西
感谢您对我的问题给予了极大的响应和帮助: 这很有效:
plot '< for i in data1.csv data2.csv data3.csv data4.csv; do cat "$i"; echo; done' every ::121::600 using 3:25:43 w pm3d
值得一提的是,我必须像"
一样在$i
附近提出广告
这也是一样的:
plot '< awk "FNR==1{print \"\"}1" data1.csv data2.csv data3.csv data4.csv' every ::121::600 using 3:25:43 w pm3d
在我的Mac OSX终端环境和Wind 7上都安装了gnuWin32软件包。
答案 0 :(得分:2)
every ::121::600
命令告诉gnuplot从每个块获取第121到600行(从0开始)的数据,而不是每个文件。您需要预处理数据以创建块(在每个数据之间放置一行)。
考虑以下两个数据文件:
#data1.dat #data2.dat
1 2 1.5 2.5 # line 0
3 4 3.5 4.5 # line 1
5 6 5.5 6.5 # line 2
并尝试用every ::2::2
绘图(即仅绘制第2行)。
以下指令创建一个块,因此gnuplot将仅绘制点(5,6)
:
cat data1.dat data2.dat
1 2
3 4
5 6
1.5 2.5
3.5 4.5
5.5 6.5
以下指令将为每个数据文件创建一个块,以便gnuplot绘制点(5,6)
和(5.5,6.5)
:
for i in data*.dat; do cat $i; echo; done
1 2
3 4
5 6
1.5 2.5
3.5 4.5
5.5 6.5
使用awk 'FNR==1{print ""}1' data*.dat
即可获得类似的结果。
总之,以下内容应该有效:
plot '< for i in data*.dat; do cat $i; echo; done' every ::2::2 using 1:2
# or
plot '< awk "FNR==1{print \"\"}1" data*.dat' every ::2::2 using 1:2