【问题标题】:Given a handle of a subplot, how to obtain all its associated colorbar handles?给定子图的句柄,如何获取其所有关联的颜色条句柄?
【发布时间】:2012-02-09 14:08:31
【问题描述】:

以如下代码为例:

Hsp=subplot(1,2,1);

image(rand(5,5));

Hc=colorbar;

subplot(1,2,2);

image(rand(5,6));

colorbar;

我的问题是如何获得Hc,只给出Hsp

众所周知,颜色条的类型是axes。所以我试图搜索子情节的所有孩子。

Hs=findall(Hsp,'type','axes');

但是,Hs 中没有与Hc 匹配的值。

【问题讨论】:

    标签: matlab handle axes colorbar subplot


    【解决方案1】:

    使用以下脚本可以找到作为轴子的所有颜色条的句柄。这里Ha1 是带有图像的轴的句柄(例如子图),Hc1s 是轴的对等颜色条的句柄。

    function Hc1s = find_peer_colorbars_of_an_axes(Ha1)
        Hf = get(Ha1,'parent');
        Haxs = findobj(Hf,'type','axes');
        IsC=false(1,length(Haxs));
        Hc1s=[];
    
        for i=1:length(Haxs)
            if isa(handle(Haxs(i)),'scribe.colorbar');
                H=handle(Haxs(i));
                if isequal(double(H.axes),Ha1)
                    Hc1s=[Hc1s,Haxs(i)];
                end
            end
        end
    

    【讨论】:

      【解决方案2】:

      您的颜色条是图形的子项,而不是子图轴的子项(颜色条本身就是轴)。试试

      hc = get(hf, 'children')
      

      获取图窗所有子代的列表,其中hf 是图窗句柄。我不确定hc 的哪个元素等于Hc,即first 颜色条。

      编辑

      如果您以后需要使用对象的句柄,最好在创建时将其分配给一个变量,并始终使用该变量。

      但是,如果您不想这样做(尽管我强烈建议您这样做),我可以想到您可以做的两件事。它们并不是特别优雅,而且肯定比将对象句柄分配给变量需要更多的工作。

      如果您知道轴的创建顺序,那么您很幸运:在子列表中,创建的第一个子元素是列表中的 last 元素,最后创建的子元素是第一个。例如,

      hf = figure;
      
      ha1 = subplot(1,2,1);
      image(rand(5,5));
      hc1 = colorbar;
      
      ha2 = subplot(1,2,2);
      image(rand(5,5));
      hc2 = colorbar;
      
      hcs = get(hf, 'children')
      
      hcs =
      
        206.0016
        204.0011
        176.0016
        174.0011
      
      [hc2, ha2, hc1, ha1]'
      
      ans =
      
        206.0016
        204.0011
        176.0016
        174.0011
      

      由于您想要第一个颜色条,也就是创建的第二个子项,因此您可以使用

      hc(end-2)
      

      或者,在创建您希望将来引用的颜色条时,将其设置为tag 属性。在上面的例子中,替换行

      hc1 = colorbar;
      

      hc1 = colorbar('tag', 'myID');
      

      然后您可以稍后使用

      获取此对象的句柄
      findobj(hf, 'type', 'axes', 'tag', 'myID')
      

      【讨论】:

      • 谢谢。是的,就是图中的孩子们。但是如果图中的颜色条不止一个,那么如何确定哪个是坐标轴呢?
      • @Xun 我已经编辑了我的答案以提供一些解决方案。但是,我重申,如果您以后要使用它,最好在创建对象时将其句柄存储起来,而不是在以后尝试找到句柄。
      • 感谢您的回答。这很有帮助。但是我找到了另一种解决方案,可以找到匿名坐标轴句柄的颜色条。
      • 受Matlab原工具箱中find_colorbar.m函数的启发,我写了一些脚本来查找对等轴的颜色条句柄。
      • @Xun 不用感谢我,只要确保您对有帮助的答案进行投票即可。此外,如果您自己找到了解决方案,您应该将其发布为答案 - 它可能对其他人有帮助。
      猜你喜欢
      • 2011-04-25
      • 1970-01-01
      • 2014-05-22
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多