MATLAB中单行/多行调用自定义绘图函数的图窗行为差异疑问
MATLAB plot2函数的图窗创建差异解析
自定义函数代码
function plot2(x) hold on fig = gcf(); ax = gca(); plot(ax, x) fig.Visible = true; figure('Visible', 'off') hold off end
问题核心
为什么单行连续执行:
>> plot2([1 2]); plot2([2 1])
会生成2个可见图窗,而分两行执行:
>> plot2([1 2]) >> plot2([2 1])
却只生成1个可见图窗?
已知测试现象:
- 单独执行
plot2():使用1个现有图窗,创建1个新图窗 - 单行连续执行
>> plot2(); plot2():先使用图窗X,创建图窗Y;接着使用图窗Y,创建图窗Z(最终3个图窗,其中2个可见) - 分两行执行
plot2():第一行使用图窗X,创建图窗Y;第二行执行时,gcf()会重新获取图窗X而非Y,仅创建新的图窗Z(最终仅X可见) - 在
hold off前执行disp(gcf)验证:两种执行方式都会创建新图窗(如输出Figure (25)、Figure (26))
原因分析
差异的本质是MATLAB命令行的执行上下文对"当前图窗"的管理逻辑:
单行连续执行(同一上下文):
两个plot2调用在同一个执行流程里,中间没有回到命令行的环节。第一个plot2执行末尾创建的不可见图窗Y会成为当前图窗,第二个plot2启动时,gcf()直接获取Y作为当前图窗,随后将Y设为可见,再创建新的不可见图窗Z。最终可见图窗为X和Y,共2个。分两行执行(独立上下文):
每一行执行完后会回到命令行,MATLAB会自动将当前图窗切换为最后一个处于可见状态的图窗。第一个plot2执行完后,虽然创建了不可见的Y,但命令行的当前图窗会被重置为已设为可见的X。第二个plot2启动时,gcf()获取的是X,绘图后将X再次设为可见,再创建新的不可见图窗Z。最终仅X可见,看起来只创建了1个图窗。
内容的提问来源于stack exchange,提问作者OverLordGoldDragon
相关产品推荐
相关产品推荐

