You need to enable JavaScript to run this app. Gnuplot粒子动画中如何在标签内实时显示数据列压强值
优惠活动
大模型
产品
解决方案
定价
更多

Gnuplot粒子动画中如何在标签内实时显示数据列压强值

可行性说明

这个需求完全可以实现。你当前的代码存在几处逻辑错位,调整后就能做到压强值和动画帧严格同步显示。

现有代码的核心问题

  • 取数范围不对:你用stats命令全文件扫描取压强值,没有限定到当前正在绘制的动画帧对应的分块,取到的是全文件的整体统计值,不是当前帧的压强
  • 列号错位:你提到压强值存储在第4列,但代码里写的是using 5,本身就读错了列
  • 格式化逻辑缺失:sprintf("Pression : ", pression) 没有加数值占位符,就算取到了压强值也不会显示在文字里
  • 标签未清理:每轮循环没有清除上一帧的旧标签,多轮循环后会出现文字层层叠加的问题

调整后的可运行代码

# 原有绘图样式配置保留
set title "Mouvement de particules d'Hélium (R = 3e-2 {/Helvetica=10 \305) \n sur une surface de 4 {/Helvetica=10 \305^{2}}"
set xlabel "L {/Helvetica=10 (\305)}"
set ylabel "L {/Helvetica=10 (\305)}"
set style line 2 lc rgb 'blue' pt 7
set style fill solid 0.4
unset key
set size square

infile = 'particules.dat'
total_frames = 21

# 逐帧循环绘制动画
do for [i=0:total_frames] {
    # 清除上一帧残留的旧标签
    unset label 1
    # 仅统计当前i号分块的第4列压强值,不扫描全文件
    stats index i infile using 4 name 'press' nooutput
    # 格式化压强数值到标签文本,固定放置在屏幕左上角区域
    set label 1 sprintf("Pression : %.2f", press_mean) at screen 0.2,0.9
    # 绘制当前帧的粒子位置
    plot infile index i using 1:2 with circles ls 2
    pause 1.0
}

适配说明

  • 如果每一个分块内所有粒子行共享同一秒的压强值(也就是同块内第4列数值完全一致),用press_mean取到的就是准确的当前帧压强值
  • 如果实际存储压强的列号和记忆有偏差,可以先单独执行stats index 0 'particules.dat' 查看列统计结果,把using后的数字改成对应压强列的编号即可
  • 如果压强值单独存在分块的特定行(比如块首的独立数据行),可以给stats加every参数精准定位该行,不需要取整列均值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 00:45:03