У меня возникают проблемы с выравниванием дескриптора 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
. Я хочу, чтобы первый текстовое поле, чтобы находиться в передней части слайдера и второе текстовое поле, чтобы быть на другой стороне слайдера, как так:
Тогда я хотел бы быть в состоянии взять ручку из выровнять объект и выполнить метод центрирования, который «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');
Это имеет смысл, и мне нужно заняться следующим, так как мне нужно поместить несколько объектов «слайдера» в другой «uipanel» и соответствующим образом выровнять их. Я понимаю ваш первый пример, который я уже реализовал, но я изо всех сил стараюсь применить его к другим объектам других размеров, то есть у вас есть '0,3' и' 0,25' для 'e_panel_position'? Что мы делаем с точки зрения математики, чтобы справиться с этим? – user1574598
Общий расчет - это «h.Position (1: 2) = (1-h.Position (3: 4))/2'. Центрированный объект имеет равное количество пространства по обе стороны от него. Общий объем пространства в контейнере имеет нормализованную длину 1, поэтому координаты влево/вправо должны быть половину того, что осталось после вычитания ширины/высоты. – Will
Спасибо, это имеет гораздо больше смысла. Извините, но я редактировал свой пост, поскольку впоследствии попытался выровнять три объекта по прямой без успеха. Возможно, вы можете помочь мне дальше? – user1574598