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
相关产品推荐
相关产品推荐

