Lukáš Altman Asked: 2019-04-28 13:42:23 +0800 CST2019-04-28 13:42:23 +0800 CST 2019-04-28 13:42:23 +0800 CST 在 gnuplot 中绘制目录中的所有文件 772 如何在gnuplot的目录中绘制所有文件?我的意思是当我有 15 个数据文件时,我会得到 15 个图表。 plot '???' with lines gnuplot 2 个回答 Voted Best Answer Weijun Zhou 2019-04-28T17:39:57+08:002019-04-28T17:39:57+08:00 一个有太多警告的解决方案(文件名中的空格、不包含数据但驻留在文件夹中的文件等)。需要您自担风险使用它。 plot for [fn in system("ls")] fn with lines title ''.i 正确的方法当然是以有序的方式命名您的文件并for以更明智的方式重写,例如 plot for [i=1:15] `mydata`.i.`.dat` using 1:2 with lines title `data set `.i 请注意,forforplot仅在较新版本的gnuplot. 编辑:根据评论和聊天中的请求,这是使用的最终形式。同样,这又快又脏,使用它需要您自担风险。 j=0 do for [fn in system("ls")] { j=j+1; set term png set output ''.fn.'.png' plot fn with lines linecolor rgb "navy" title ''.i } Otto Hanski 2019-06-07T03:27:23+08:002019-06-07T03:27:23+08:00 Weijun Zhou 已经为您提供了一个可行的解决方案,尽管它有点不稳定。如果您有很多数据文件,因此手动重命名它们以遵循公式是不现实的,您可以检查文件格式(.txt、.dat,无论您的数据保存为什么)以过滤掉不需要的文件。 示例:绘制文件夹中的所有 .txt 文件并将它们保存为 .png 以供将来分析。 do for [fn in system("ls")] { len=strlen(fn) form=substr(fn,len-3,len) if (form eq ".txt") { set term png data=sprintf("%s",fn) filename=sprintf("%s.png",substr(fn,0,len-4)) set output filename plot data using 1:2 title "Data" unset output } } 这将遍历每个文件,检查它是否是 .txt 文件,如果是,它将被绘制并保存为与原始 .txt 文件同名的 .png。这样您就可以避免程序尝试读取不正确的文件格式可能导致的任何问题,只要您没有任何多余的 .txt 文件漂浮在同一文件夹中。 附带说明一下,如果查看此线程的人想要在 Windows 版本的 Gnuplot 上运行它,由于系统命令不同,您需要对第一行进行更改: system("ls") => system("dir /b")
一个有太多警告的解决方案(文件名中的空格、不包含数据但驻留在文件夹中的文件等)。需要您自担风险使用它。
正确的方法当然是以有序的方式命名您的文件并
for
以更明智的方式重写,例如请注意,
for
forplot
仅在较新版本的gnuplot
.编辑:根据评论和聊天中的请求,这是使用的最终形式。同样,这又快又脏,使用它需要您自担风险。
Weijun Zhou 已经为您提供了一个可行的解决方案,尽管它有点不稳定。如果您有很多数据文件,因此手动重命名它们以遵循公式是不现实的,您可以检查文件格式(.txt、.dat,无论您的数据保存为什么)以过滤掉不需要的文件。
示例:绘制文件夹中的所有 .txt 文件并将它们保存为 .png 以供将来分析。
这将遍历每个文件,检查它是否是 .txt 文件,如果是,它将被绘制并保存为与原始 .txt 文件同名的 .png。这样您就可以避免程序尝试读取不正确的文件格式可能导致的任何问题,只要您没有任何多余的 .txt 文件漂浮在同一文件夹中。
附带说明一下,如果查看此线程的人想要在 Windows 版本的 Gnuplot 上运行它,由于系统命令不同,您需要对第一行进行更改: