如何批量生成类QT级高分辨率Gnuplot矢量PDF与PNG图?
批量生成Gnuplot高分辨率矢量图与PNG图的解决方案
现有主目录下包含run1到run10共10个子目录,每个子目录里有Fortran程序生成的30个数据文件,命名规则为data_fl.N.dat(N取0、50、100…1500,间隔50)。需要批量处理这些文件生成Gnuplot图,已知交互式QT终端的图分辨率高、箭头锐利,但无法批量保存;pdfcairo/pngcairo输出的图存在分辨率或箭头粗细问题。当前用pngcairo的代码如下:
set term pngcairo
set size square
p 'data_fl.400.dat' u 3:4:5:6 w vec
问题1:命令行生成类QT级高分辨率矢量PDF与高分辨率PNG
Gnuplot的QT终端支持直接输出矢量PDF和高分辨率PNG,且能复刻交互式窗口的视觉效果,无需依赖pdfcairo/pngcairo:
生成高分辨率矢量PDF
通过QT终端的PDF输出模式,配合自定义箭头样式匹配QT窗口的锐利效果:set term qt enhanced font 'Arial,10' size 800,800 # 画布尺寸可按需调整 set output 'data_fl.400.pdf' set size square set style arrow 1 heads filled size screen 0.02,15,45 # 精细调箭头大小、填充和角度 plot 'data_fl.400.dat' u 3:4:5:6 w vec as 1 set output生成的PDF为矢量格式,清晰度和箭头锐利度与QT交互式窗口完全一致。
生成高分辨率PNG(用于动画)
同样用QT终端,放大画布尺寸来提升PNG分辨率:set term qt enhanced font 'Arial,10' size 1600,1600 # 更大画布对应更高分辨率 set output 'data_fl.400.png' set size square set style arrow 1 heads filled size screen 0.02,15,45 plot 'data_fl.400.dat' u 3:4:5:6 w vec as 1 set output输出的PNG分辨率与QT窗口导出的效果一致,适合制作演化动画。
问题2:bash脚本批量处理所有run*子目录的30个数据文件
编写bash脚本自动遍历所有目录和数据文件,批量调用Gnuplot生成对应图表:
步骤1:创建批量处理脚本
新建batch_plot.sh文件,内容如下:
#!/bin/bash # 遍历所有run开头的子目录 for run_dir in run*/; do echo "正在处理目录:$run_dir" cd "$run_dir" || continue # 进入子目录,失败则跳过 # 遍历所有N值(0到1500,间隔50) for N in $(seq 0 50 1500); do data_file="data_fl.${N}.dat" if [ -f "$data_file" ]; then # 生成对应PDF gnuplot <<- EOF set term qt enhanced font 'Arial,10' size 800,800 set output '${data_file%.dat}.pdf' set size square set style arrow 1 heads filled size screen 0.02,15,45 plot '$data_file' u 3:4:5:6 w vec as 1 set output EOF # 生成对应高分辨率PNG gnuplot <<- EOF set term qt enhanced font 'Arial,10' size 1600,1600 set output '${data_file%.dat}.png' set size square set style arrow 1 heads filled size screen 0.02,15,45 plot '$data_file' u 3:4:5:6 w vec as 1 set output EOF fi done cd .. # 返回主目录 done
步骤2:执行脚本
给脚本添加执行权限并运行:
chmod +x batch_plot.sh ./batch_plot.sh
脚本说明
run*/自动匹配所有run开头的子目录seq 0 50 1500生成所有符合规则的N值,确保覆盖全部30个数据文件${data_file%.dat}.pdf通过替换文件名后缀,自动生成对应格式的输出文件- Here Document语法(
<<- EOF)将Gnuplot命令直接传递给进程执行,无需单独写gnuplot脚本
内容的提问来源于stack exchange,提问作者damaihati
相关产品推荐
相关产品推荐

