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

如何在Bash脚本中绘制bitrates与psnrArray数组的图表?

在Bash中实现Bitrate与PSNR数组的可视化绘图

我来帮你搞定这个Bash脚本绘图的需求!既然你已经把比特率和PSNR数据写入了Data文件,接下来用gnuplot来生成可视化图表就非常合适——这是Linux/macOS生态里最常用的命令行绘图工具,几乎所有发行版都能通过包管理器快速安装。

第一步:整理数据格式

你当前的Data文件是两行数据:第一行是所有比特率值,第二行是对应的PSNR值。但gnuplot默认按列读取数据(每行一组对应数据),所以咱们需要先把两行转成两列的格式。

你可以直接在脚本里处理,不用手动修改文件:

# 把Data文件的两行数据转成两列(每行对应一个bitrate和PSNR配对值)
paste <(cat Data | head -n1 | tr ' ' '\n') <(cat Data | tail -n1 | tr ' ' '\n') > formatted_data.txt

或者更高效的方式——直接用数组生成格式化数据,跳过Data中间文件:

paste <(echo "${bitrates[*]}" | tr ' ' '\n') <(echo "${psnrArray[*]}" | tr ' ' '\n') > formatted_data.txt

第二步:用gnuplot生成图表

接下来调用gnuplot绘制折线图,这里给你写好完整的Bash调用脚本:

# 调用gnuplot生成PNG格式的图表
gnuplot << EOF
set terminal png enhanced font 'Arial,12'  # 设置输出格式为PNG,指定字体和字号
set output 'bitrate_psnr_plot.png'         # 指定输出文件名称
set title 'Bitrate vs PSNR Performance'    # 设置图表标题
set xlabel 'Bitrate'                       # 设置X轴标签
set ylabel 'PSNR (dB)'                     # 设置Y轴标签
set grid                                   # 显示网格线,提升可读性
# 绘制折线+数据点,用第1列做X轴,第2列做Y轴,设置点样式和大小
plot 'formatted_data.txt' using 1:2 with linespoints pointtype 7 pointsize 1.5 title 'PSNR Curve'
EOF

如果你不想生成formatted_data.txt中间文件,也可以直接通过管道把数据传给gnuplot,一步到位:

gnuplot << EOF
set terminal png enhanced font 'Arial,12'
set output 'bitrate_psnr_plot_direct.png'
set title 'Bitrate vs PSNR (Direct Data)'
set xlabel 'Bitrate'
set ylabel 'PSNR (dB)'
set grid
# 直接通过管道传递格式化后的数据,无需中间文件
plot '< paste <(echo "${bitrates[*]}" | tr " " "\n") <(echo "${psnrArray[*]}" | tr " " "\n")' using 1:2 with linespoints pointtype 7 pointsize 1.5 title 'PSNR Curve'
EOF

补充:安装gnuplot

如果你的系统还没装gnuplot,用下面的命令安装:

  • Ubuntu/Debian:sudo apt install gnuplot
  • CentOS/RHEL:sudo yum install gnuplot
  • macOS:brew install gnuplot

完整脚本示例

把所有步骤整合起来,就是一个可以直接运行的Bash脚本:

#!/bin/bash

# 定义比特率数组
bitrates=(1 2 3 4 5)
# 模拟动态填充的PSNR数组(实际使用时替换为你的逻辑)
psnrArray=(30.5 32.1 34.8 36.5 38.2)

# 生成格式化数据文件
paste <(echo "${bitrates[*]}" | tr ' ' '\n') <(echo "${psnrArray[*]}" | tr ' ' '\n') > formatted_data.txt

# 生成图表
gnuplot << EOF
set terminal png enhanced font 'Arial,12'
set output 'bitrate_psnr_plot.png'
set title 'Bitrate vs PSNR'
set xlabel 'Bitrate'
set ylabel 'PSNR (dB)'
set grid
plot 'formatted_data.txt' using 1:2 with linespoints pointtype 7 pointsize 1.5 title 'PSNR Curve'
EOF

echo "图表已成功生成:bitrate_psnr_plot.png"

运行这个脚本后,你就能得到一张清晰的折线图,直观展示比特率和PSNR的对应关系啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:56