Учитывая дескриптор подзаговора, как получить все связанные дескрипторы цветовой панели? - PullRequest
2 голосов
/ 13 января 2012

Возьмите следующий код, например:

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.

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Используя следующий скрипт, можно найти дескриптор всех цветовых полос, которые являются дочерними элементами оси.Здесь 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
1 голос
/ 13 января 2012

Ваши цветные полосы являются дочерними по отношению к фигуре, а не по осям вашего вспомогательного графика (цветные полосы сами являются осями).Попробуйте

hc = get(hf, 'children')

, чтобы получить список всех дочерних элементов фигуры, где hf - дескриптор фигуры.Я не уверен, как бы вы, какой элемент hc равен вашему Hc, т. Е. Какой является first colorbar.

Редактировать :

Если вам понадобится позже использовать дескриптор объекта, лучше всего присвоить его переменной при его создании и использовать эту переменную повсеместно.

Однако, если вы неЯ не хочу этого делать (хотя я настоятельно рекомендую это сделать). Я могу думать о двух вещах, которые вы можете сделать.Они не особенно элегантны и, безусловно, требуют больше работы, чем просто присвоение дескриптора объекта переменной.

Если вы знаете порядок, в котором были созданы оси, то вам повезло: в списке, если дети,первый созданный дочерний элемент - это последний элемент в списке, а последний созданный дочерний элемент - first .Например,

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')
...