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

Gnuplot动画制作:如何读取数据文件文本内容并打印到图表上

方案1:直接使用gnuplot内置labels绘图样式(最简实现)

如果你只是要将第三列文本标注在对应第一、二列的坐标点上,不需要额外循环控制逻辑,一行plot命令即可实现:

plot 'file-name.dat' using 1:2 with linespoints title '数据曲线', \
     '' using 1:2:3 with labels offset 1,1 font ',10' notitle
  • with labels 会自动读取第三列内容作为标注文本,默认展示在(第一列数值, 第二列数值)的对应坐标位置
  • offset 1,1 作用是让标注偏移1个坐标单位,避免和数据点重合,可根据需求自行调整数值
  • 如果你需要把所有标注统一固定在(2000,4000)位置,将第二个plot项修改为using (2000):(4000):3 with labels即可

方案2:按你写的循环逻辑,先把数据读取到变量/数组中

gnuplot 5.0及以上版本支持数组,你可以先读取文件行数,再把第三列内容存入数组调用:

步骤1:统计文件有效行数

stats 'file-name.dat' nooutput
n = STATS_records - 1 # 如果行号从0开始计数就减1,可根据你的行号规则调整
array label_content[n+1] # 定义数组存储第三列的文本内容

步骤2:循环读取每一行第三列内容存入数组

Linux/macOS环境:

do for [j=0:n] {
    label_content[j] = system("sed -n '".(j+1)."p' file-name.dat | awk '{print $3}'")
}

Windows环境(无sed/awk工具):

file_content = system("type file-name.dat")
do for [j=0:n] {
    current_line = word(file_content, j+1)
    label_content[j] = word(current_line, 3)
}

步骤3:按你的逻辑循环绘图

do for[j=0:n:1]{
    unset label
    set label label_content[j] at 2000, 4000 # 按你需要的位置放置标签
    plot 'file-name.dat' u 1:2 with linespoints title "第".j."帧"
    # 如果需要导出逐帧图片,可以在这里补充set output相关导出命令
}

内容的提问来源于stack exchange,提问作者akvadiv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:07