这在 gnuplot 中是无法直接实现的。但是,您可以使用系统调用来获取要绘制的文件列表:
filelist=system("ls *.csv")
plot for [filename in filelist] filename using 1:2
因此,这里有一个示例,它为每个样本编号创建一个带有所有引用的图:
do for [i=1:35] {
cmd = sprintf("ls blast_sample%d_454LargeContigs.fna.fas_vs_NC_*_filter.txt", i)
filelist=system(cmd)
plot for [filename in filelist] filename using ...
}
如果您希望每个参考一个包含所有样本的图,如果参考编号不是一个简单的系列,则变得更加困难。如果您想将所有内容都绘制在一个大图中,可以使用
ls blast_sample*_454LargeContigs.fna.fas_vs_NC_*_filter.txt
(这是 Linux。对于 Windows,您需要 dir \B ...)
编辑:
这个问答快三年了,直到最近的评论出现,我才注意到评论中的附加问题。
不清楚您所说的输出名称是什么意思。文件名?每条曲线的标签?剧情标题?
一般情况下是可以的
set terminal pdfcairo
do for [i=1:35] {
cmd = sprintf("ls blast_sample%d_454LargeContigs.fna.fas_vs_NC_*_filter.txt", i)
filelist=system(cmd)
set output sprintf("Sample_%d.pdf", i)
title= sprintf("This is the title for plot %d", i)
plot for [filename in filelist] filename using ... title sprintf("This data comes from %s", filename)
}
unset output
任何返回字符串的函数都可以用来构建你的字符串。
虽然样本编号被称为数字,但如果您想使用它,提取参考编号(在“NC”之后)有点棘手。 Gnuplot 有一些rudimentary string functions,这可能允许这样做。
如果参考编号始终具有相同的长度,我将使用 substr(filename,strlen(filename)-a,strlen(filename)-b) 和 a 和 b 的正确值来提取此编号。
如果没有,我会使用substr获取一个从参考号开始的字符串(位置可以计算),然后使用strstrt搜索_的第一次出现,然后剪掉串到这个位置。将此任务传递给外部命令行程序可能更容易。 Linux 的cut 可以轻松完成这项工作。