调用findobj()未指定父对象时,默认搜索范围是什么?
Matlab中
findobj未指定父对象时的搜索范围详解 嘿,这个问题我之前做可视化的时候也踩过坑,给你明确说清楚:
当你只写findobj('Type','line')不指定父对象时,它的搜索范围是整个MATLAB会话里的所有图形对象——准确来说是根图形对象(root)的全部子对象,不管这些对象属于哪个窗口、是不是隐藏状态,只要还存在于Matlab的图形对象树里,都会被搜到。
再跟你对比几种常见情况,你就更清楚了:
- 用
findobj(gca,'Type','line'):搜索范围严格锁定在当前坐标轴(gca指向的那个Axes)的所有子对象里,只找这个坐标轴下的线条。 - 用
findobj(gcf,'Type','line'):搜索范围是当前激活的图形窗口(gcf对应的Figure)及其所有子对象,只会找这个窗口里的线条。 - 而无父对象的
findobj('Type','line'):相当于全局搜索,哪怕你开了5个Figure窗口,每个窗口里有N条线,它都会把所有符合条件的句柄找出来。
顺便纠正一个误区:它不是搜索当前工作区的所有对象。工作区里的变量是你定义的存储单元,而findobj遍历的是Matlab的图形对象树——举个例子,如果你把某个线条的句柄从工作区删掉,但这个线条还在窗口里显示,findobj依然能搜到它;反过来,工作区里存了一个已经被删除的对象句柄,findobj是找不到的。
给你个小例子验证一下:
% 打开两个窗口,各画一条线 figure; plot(1:5); % 窗口1的线条 figure; plot(5:-1:1); % 窗口2的线条 % 全局搜索,返回2个句柄 all_lines = findobj('Type','line'); disp(length(all_lines)); % 输出2 % 只搜当前窗口(窗口2),返回1个句柄 current_fig_lines = findobj(gcf,'Type','line'); disp(length(current_fig_lines)); % 输出1 % 只搜当前坐标轴(窗口2的坐标轴),返回1个句柄 current_ax_lines = findobj(gca,'Type','line'); disp(length(current_ax_lines)); % 输出1
内容的提问来源于stack exchange,提问作者Toothpick Anemone
相关产品推荐
相关产品推荐

