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

Octave绘图时如何在plot内用char()字符串设置;displayname;图例属性

更新

我已定位到legend()函数失效的原因,相关问题为:legend()是否需要会在不同作用域中丢失的隐式变量。

  • 我尝试在plot函数的";;displayname;"图例属性格式中调用变量(参考官方文档15.2.1 二维绘图章节),但没找到对应的用法说明。
  • 受实际代码结构限制,单独调用legend()没法正常生效;加上我设备上的Octave GUI跑不起来,也不熟悉Octave命令行调试方法,没法排查这个问题。
  • 所以我认为,找个方法直接在plot()函数内部完成图例定义,是目前唯一可行的方案。

测试代码

基础隔离测试代码

cur = char ( ["hi";"he";"le"] )

% 单独调用legend在隔离测试中可正常工作,但在实际程序中失效

loglog ( 3*[1:10].^3 )
legend ( cur(1,:) )

已尝试的无效方案

% 直接传入字符串会原样输出cur(1,:)文本,不会解析变量
loglog ( 3*[1:10].^3, ";cur(1,:);" )

% 直接拼接字符串会抛出语法错误
loglog ( 3*[1:10].^3, ";"cur(1,:)";" )

% 用+拼接字符串会抛出错误"__plt2vv__: vector lengths must match"
loglog ( 3*[1:10].^3, (";" + cur(1,:) + ";"))

上述第二种、第三种尝试的写法参考自MATLAB Central的相关帖子

正确实现方法

Octave里的+运算符不支持字符串拼接,会直接对字符串的ASCII值做算术运算,这就是第三种写法报向量长度不匹配错误的原因。要在绘图函数内直接传入带变量的图例名,用方括号做字符串水平拼接就行:

cur = char ( ["hi";"he";"le"] )
% 拼接后生成符合";displayname;"格式的字符串,直接作为绘图参数传入
loglog ( 3*[1:10].^3, [";", cur(1,:), ";"] )

如果要绘制多条曲线,循环绘图时逐组按这个格式传入对应显示名即可,不需要额外单独调用legend(),能完全避开作用域导致的legend失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:54:19