请求修改Gnuplot脚本:单输入生成对应命名的多SVG输出
修改后的Gnuplot脚本实现方案
核心思路
- 从单个输入文件中提取31组数据对应的输出SVG文件名
- 循环遍历每组数据,使用对应文件名输出SVG
- 利用Gnuplot的
index参数定位单文件中的不同数据集(默认空行分隔数据块)
假设输入文件格式示例
输入文件(比如all_data.txt)结构如下,每组数据前用注释行指定输出文件名,数据块间用空行分隔:
output: 1-1.svg0 0
1 2
2 4output: 1-2.svg0 1
1 3
2 5
...
(共31组)
修改后的完整脚本
# 配置SVG终端(保留原脚本的终端设置) set terminal svg enhanced background rgb 'white' size 800,600 set key top right set grid # 定义输入文件路径 input_file = "all_data.txt" # 从输入文件提取所有输出文件名(适配上述注释行格式) filename_list = system("awk '/^# output:/ {print $3}' ".input_file) # 初始化存储文件名的数组(31个元素) array output_files[31] do for [i=1:31] { output_files[i] = word(filename_list, i) } # 循环处理每组数据 do for [i=1:31] { # 设置当前输出文件名 set output output_files[i] # 绘制对应数据集(index从0开始,所以i-1对应第i组数据) plot input_file index (i-1) using 1:2 with lines title "Group ".i } # 重置终端 set terminal reset
关键调整说明
- 文件名提取:通过
awk命令筛选输入文件中以# output:开头的行,提取第三个字段作为输出文件名,确保和输入文件内指定的名称完全一致 - 数组存储文件名:用Gnuplot数组保存31个文件名,循环时直接调用
- 数据集定位:使用
index (i-1)定位单文件中的第i组数据(Gnuplot默认以空行分隔数据块,索引从0开始) - 循环逻辑:固定循环31次,对应输入文件中的31组数据
适配不同输入格式的调整
如果输入文件的文件名不是通过注释行指定,而是每组数据的第一行就是文件名(比如第一行是1-1.svg,后续是数据),可以修改文件名提取命令:
# 提取每组数据的第一行作为文件名(假设每组数据块间有空行) filename_list = system("awk 'NF>0 && !prev {print; prev=1} NF==0 {prev=0}' ".input_file)
内容的提问来源于stack exchange,提问作者Courtney Brea
相关产品推荐
相关产品推荐

