2015-10-24 2 views
0

У меня возникают проблемы с выравниванием дескриптора axes_h в пределах uipanel. Я хочу, чтобы мой сюжет имел конкретный размер, а затем центрировал его в середине панели, а затем, надеюсь, выровнял мой uipanel с моей фигурой впоследствии. Я просмотрел документацию, и в примере только выравниваются и распределяются кнопки uicontrol в пределах figure.Выравнивание осей ручки внутри UIPanel программно - Matlab

Вот мой код:

%% create figure 
fig_h = figure; 
set(fig_h, 'Position', [100, 100, 1049, 895]); 

%% create empty scatter plot within a panel 
e_panel_position = [0.1 0.4 0.4 0.5]; 
e_panel_h = uipanel('Parent', fig_h, 'Title','Emotion','FontSize',12,'BackgroundColor','white','Position',e_panel_position); 

axes_position = [0 0 0.7 0.8]; 
axes_h = axes('Parent', e_panel_h, 'Position', axes_position); 
scatter_h = scatter(axes_h, [],[], 'MarkerEdgeColor',[0 .5 .5], 'MarkerFaceColor',[0 .7 .7],'LineWidth',1.5); 
axis(axes_h, [-4 4 -4 4]); 
align(axes_h, 'HorizontalAlignment', 'Center', 'VerticalAlignment', 'Middle'); 

EDIT:

Я изо всех сил, чтобы получить две статические текстовые поля и ползунок для выравнивания по прямой линии с использованием функции align. Я хочу, чтобы первый текстовое поле, чтобы находиться в передней части слайдера и второе текстовое поле, чтобы быть на другой стороне слайдера, как так:

slider

Тогда я хотел бы быть в состоянии взять ручку из выровнять объект и выполнить метод центрирования, который «Will» предложил ниже, чтобы центрировать все три элемента как коллективную группу. Изображение иллюстрирует это, но это очень сложно сделать, поскольку я сделал это вручную. Тем не менее, мне нужно сделать это для многих других слайдеров внутри гораздо большего количества полей uipanel, поэтому я решил, что это будет более быстрый метод.

Вот мой код:

%% create environment slider and text with panel 
env_panel_position = [0.1 0.33 0.4 0.1]; 
env_panel_h = uipanel('Parent', fig_h, 'Title','Environment','FontSize',12,'BackgroundColor','white','Position',env_panel_position); 

dark_text_position = [0 0 0.1 0.3]; 
dry_text_h = uicontrol('Parent', env_panel_h, 'Style', 'text', 'units', 'normalized', 'position', dark_text_position, 'String', 'dark'); 

dark_light_slider_position = [0 0 0.7 0.1]; 
dark_light_slider_h = uicontrol('Parent', env_panel_h, 'Style', 'slider', 'units', 'normalized', 'position', dark_light_slider_position); 

wet_text_position = [0 0 0.1 0.3]; 
wet_text_h = uicontrol('Parent', env_panel_h, 'Style', 'text', 'units', 'normalized', 'position', wet_text_position, 'String', 'Light'); 

align_h = align([dry_text_h dark_light_slider_h wet_text_h], 'Distribute', 'Middle'); 

ответ

1

align функция положение несколько объектов таким образом они соответствуют. Чтобы центрировать графический объект внутри своего контейнера, вам просто нужно указать ему правильное положение в единицах normalized, что по умолчанию для объектов, которые вы создаете.

Ваше определение axes_position = [0 0 0.7 0.8]; означает, что axes_h имеет ширину 70% от uipanel и 80% от ее высоты. Для того, чтобы расположить его в центре, нужно просто установить нижнюю левую координату быть 15% пути по горизонтали и 10% от пути до контейнера:

axes_position = [0.15 0.1 0.7 0.8]; 

Те же работы по позиционированию uipanel:

e_panel_position = [0.3 0.25 0.4 0.5]; 
+0

Это имеет смысл, и мне нужно заняться следующим, так как мне нужно поместить несколько объектов «слайдера» в другой «uipanel» и соответствующим образом выровнять их. Я понимаю ваш первый пример, который я уже реализовал, но я изо всех сил стараюсь применить его к другим объектам других размеров, то есть у вас есть '0,3' и' 0,25' для 'e_panel_position'? Что мы делаем с точки зрения математики, чтобы справиться с этим? – user1574598

+0

Общий расчет - это «h.Position (1: 2) = (1-h.Position (3: 4))/2'. Центрированный объект имеет равное количество пространства по обе стороны от него. Общий объем пространства в контейнере имеет нормализованную длину 1, поэтому координаты влево/вправо должны быть половину того, что осталось после вычитания ширины/высоты. – Will

+0

Спасибо, это имеет гораздо больше смысла. Извините, но я редактировал свой пост, поскольку впоследствии попытался выровнять три объекта по прямой без успеха. Возможно, вы можете помочь мне дальше? – user1574598

Смежные вопросы