用gnuplot同时绘制目录中的所有文件?

时间:2015-04-30 13:43:13

标签: gnuplot

我想做一些与此问题相似的事情:gnuplot : plotting data from multiple input files in a single graph

我想同时绘制所有目录中的文件,而不必明确地写出他们的名字。所有文件的列号都相同。我该怎么办?

执行plot for [file in *] file u 3:2无效。

另外,我不希望每个文件都有不同的图例。所有文件中的所有点都应该被视为相同,就像它们都来自单个文件一样。

3 个答案:

答案 0 :(得分:7)

作为Jonatan答案的替代方案,我会选择

FILES = system("ls -1 *.dat")
plot for [data in FILES] data u 1:2 w p pt 1 lt rgb 'black' notitle

plot '<(cat *.dat)' u 3:2 title 'your data'

如果要标记每条曲线,第一个选项可为您提供更大的灵活性。例如,如果您有多个名称为data_1.datdata_2.dat等的文件,这些文件将标记为12等,则:

FILES = system("ls -1 data_*.dat")
LABEL = system("ls -1 data_*.dat | sed -e 's/data_//' -e 's/.dat//'")

plot for [i=1:words(FILES)] word(FILES,i) u 3:2 title word(LABEL,i) noenhanced

答案 1 :(得分:2)

我希望能够选择要用通配符绘制的文件,所以如果你喜欢,你可以按照以下方式进行,尽管有很多方法。创建以下脚本。

script.sh:

example.com/public/products -> example.com/products
example.com/public/products/123 -> example.com/products/123

gnuplot -p << eof set term wxt size 1200,900 title 'plots' set logs set xlabel 'energy' plot for [ file in "$@" ] file w l eof

chmod u+x script.sh

一样运行

如果你需要它经常为它做一个别名并把它放在一个合理的地方:) 干杯/ J

答案 2 :(得分:0)

尝试以下命令:

gnuplot -e 'plot for [file in system("find . -depth 1 -type f -print")] file u 3:2'

注意:添加-p以保留绘图窗口。