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

如何批量生成类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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:37:10