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
相关产品推荐
相关产品推荐

