如何通过编程检查gnuplot中是否设置了logscale?
解决gnuplot中判断坐标轴logscale状态的问题
以下两种可行方案可实现“未设置logscale时对应变量为NaN,设置后存储对应底数”的需求:
方案1:解析show logscale的输出
直接捕获show logscale的输出并解析,判断坐标轴是否开启对数刻度及对应底数:
# 初始化变量为NaN GPVAL_X_LOG = NaN GPVAL_Y_LOG = NaN # 将show logscale的输出写入临时字符串变量$LogInfo set print $LogInfo show logscale x show logscale y set print # 遍历输出内容,提取对数轴信息 do for [i=1:|$LogInfo|] { line = $LogInfo[i] # 处理x轴 if (strstrt(line, "logscale x") != 0) { GPVAL_X_LOG = real(word(line, 4)) } # 处理y轴 if (strstrt(line, "logscale y") != 0) { GPVAL_Y_LOG = real(word(line, 4)) } }
该方法无需依赖错误触发,逻辑直观,兼容性强。
方案2:临时忽略错误并捕获状态
通过set errorignore避免脚本因错误终止,利用设置link时的错误判断对数轴状态:
# 保存原错误忽略状态,后续恢复 old_errorignore = GPVAL_ERRORIGNORE set errorignore on # 判断x轴是否为对数轴 GPVAL_X_LOG = NaN set link x2 via x inverse x if (GPVAL_ERRMSG != "") { set print $Temp show logscale x set print GPVAL_X_LOG = real(word($Temp[1], 4)) } unset link x2 # 判断y轴是否为对数轴 GPVAL_Y_LOG = NaN set link y2 via y inverse y if (GPVAL_ERRMSG != "") { set print $Temp show logscale y set print GPVAL_Y_LOG = real(word($Temp[1], 4)) } unset link y2 # 恢复原错误忽略状态 set errorignore old_errorignore
此方法利用gnuplot的错误机制,适合需要快速判断的场景,但需注意恢复环境状态避免影响后续脚本。
内容的提问来源于stack exchange,提问作者theozh
相关产品推荐
相关产品推荐

