You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改Gnuplot脚本:单输入生成对应命名的多SVG输出

修改后的Gnuplot脚本实现方案

核心思路

  1. 从单个输入文件中提取31组数据对应的输出SVG文件名
  2. 循环遍历每组数据,使用对应文件名输出SVG
  3. 利用Gnuplot的index参数定位单文件中的不同数据集(默认空行分隔数据块)

假设输入文件格式示例

输入文件(比如all_data.txt)结构如下,每组数据前用注释行指定输出文件名,数据块间用空行分隔:

output: 1-1.svg

0 0
1 2
2 4

output: 1-2.svg

0 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:20:19