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

Gnuplot 6.0动画未正常更新:仅3000°F时重绘曲线求助

Gnuplot动画无法逐帧更新曲线的解决办法

你的问题出在初始plot语句的变量解析机制上:Gnuplot执行首次plot时,会把表达式里的Temp直接替换成当时的初始值2700,生成固定的曲线数据。之后的replot只是重复绘制这份旧数据,不会读取更新后的Temp值,导致只有当Temp变化到某个触发重新计算的节点(比如3000°F)才会更新,大部分帧都没有变化。

有两种简单的修复方式:

方法1:循环内重新执行plot语句

把绘制曲线的逻辑放到循环内部,每次循环都用最新的Temp值重新计算并绘制曲线:

set term gif animate
set output 'temp.gif'
set xrange [200:1100]
set yrange [0:.25]
set title "wt%C vs PPM as temp varies"
set xlabel "PPM"
set ylabel "wt% C"
Temp = 2700
set samples 1000

# 绘制第一帧
plot (exp(-15024/Temp+8.47))/x
set label 1 at 500,0.20 sprintf('Temp=%1.2f',Temp)

# 循环更新温度并绘制每帧
do for [i = 25:500:25]{
  Temp = i + 2700
  set label 1 sprintf('Temp=%1.2f',Temp)
  plot (exp(-15024/Temp+8.47))/x
}
unset output

方法2:使用自定义函数

定义一个依赖Temp的函数,这样replot时会自动重新计算函数值,使用最新的Temp:

set term gif animate
set output 'temp.gif'
set xrange [200:1100]
set yrange [0:.25]
set title "wt%C vs PPM as temp varies"
set xlabel "PPM"
set ylabel "wt% C"
Temp = 2700
set samples 1000

# 定义依赖Temp的函数
f(x) = (exp(-15024/Temp+8.47))/x

# 初始绘制
plot f(x)
set label 1 at 500,0.20 sprintf('Temp=%1.2f',Temp)

# 循环更新温度并重绘
do for [i = 25:500:25]{
  Temp = i + 2700
  set label 1 sprintf('Temp=%1.2f',Temp)
  replot
}
unset output

两种方法都能让每一次温度变化都触发曲线更新,生成符合预期的逐帧动画。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 06:33:11