Импортировать цифры в графический интерфейс MATLAB с помощью ручек?

Как я могу буквально взять эти цифры и поместить их в окна осей моего графического интерфейса?

Я не уверен, где разместить дескрипторы в моем пользовательском коде в приведенном ниже примере. Всего у меня есть 4 фигуры, похожие на этот пример. Я хочу, чтобы 4 фигуры отображались в моем графическом окне, а не в отдельных окнах, поэтому я создал окна с 4 осями в файле .fig.

Код для этой конкретной фигуры рисует сетку из 66 черно-белых прямоугольников в зависимости от того, является ли значение в MyVariable 1 или 0. Черный, если MyVariable равен 1, белый, если MyVariable равен 0. У меня есть файл для моего .fig GUI, один файл для управления графическим интерфейсом и один с определяемым пользователем кодом, который ссылается на графический интерфейс.

function test = MyScript(handles)

много кода между ними

% Initialize and clear plot window 
figure(2); clf;

% Plot the west wall array panels depending on whether or not they are
% shaded or unshaded
for x = 1:11
     for y = 1:6
  if (MyVariable(x,y) == 1)
  rectangle('position', [x-1, y-1, 1, 1] ,'EdgeColor', 'w', 'facecolor', 'k')
  else if(MyVariable(x,y) == 0)
  rectangle('position', [x-1, y-1, 1, 1], 'facecolor', 'w')
end
end
end
end

title('West Wall Array',... 
  'FontWeight','bold')

axis off

Рисунок для приведенного выше кода выглядит так: введите здесь описание изображения

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

Мой код GUI-скрипта содержит:

   MyScript(handles);

person loco    schedule 17.12.2013    source источник


Ответы (2)


Как говорит DMR, необходимо установить «CurrentAxes». Например, если вы хотите отобразить ось с именем тега «ось1», вы должны просто добавить:

axes(handles.axes1);

к вашему коду. Ниже приведен очень простой пример фигуры, содержащей «ось 1» и «ось 2», с использованием вашего (исправленного) кода из приведенного выше. Я не совсем уверен, хотите ли вы построить ось на самом графическом интерфейсе или на отдельной фигуре. Надеюсь, я рассмотрел оба случая.

function varargout = Test(varargin)

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Test_OpeningFcn, ...
                   'gui_OutputFcn',  @Test_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before Test is made visible.
function Test_OpeningFcn(hObject, eventdata, handles, varargin)


% Choose default command line output for Test
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

plot(handles.axes2,-2*pi:0.1:2*pi,sin(-2*pi:0.1:2*pi));

% Initialize and clear plot window 


MyVariable = ones(11,6);
MyVariable(1:5,1) = 0;

axes(handles.axes1);

for x = 1:11
    for y = 1:6
        if (MyVariable(x,y) == 1)
            rectangle('position', [x-1, y-1, 1, 1] ,'EdgeColor', 'w', 'facecolor', 'k');
        elseif(MyVariable(x,y) == 0)
            rectangle('position', [x-1, y-1, 1, 1], 'facecolor', 'w');
        end
    end
end

title('West Wall Array',... 
  'FontWeight','bold')

figure(2); clf;

for x = 1:11
    for y = 1:6
        if (MyVariable(x,y) == 1)
            rectangle('position', [x-1, y-1, 1, 1] ,'EdgeColor', 'w', 'facecolor', 'k');
        elseif(MyVariable(x,y) == 0)
            rectangle('position', [x-1, y-1, 1, 1], 'facecolor', 'w');
        end
    end
end

title('West Wall Array',... 
  'FontWeight','bold')

function varargout = Test_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;

Графический интерфейс вашего руководства должен выглядеть следующим образом: введите здесь описание изображения

И ваш результат выглядит следующим образом: введите здесь описание изображения

person Semjon Mössinger    schedule 17.12.2013
comment
Спасибо. Это решило мою проблему, хотя значения оси все еще отображаются на 3 моих графиках, и это нежелательно. Это изображение того, что у меня есть: dl.dropboxusercontent.com/u /104069213/GUI%20example%201.png Рисунок «Массив западной стены» — именно тот формат, который мне нужен. Другие изображения под названием «Массив» имеют значения на изображениях, и изображения перекошены. Они не выглядели так до того, как поместили их в графический интерфейс. Вот так они выглядели как отдельные фигуры, как и «Массив западной стены»: dl.dropboxusercontent.com/u/104069213/GUI%20example%202.png Есть мысли? - person loco; 18.12.2013

Вы можете установить ось для построения перед каждой командой построения графика, установив свойство «CurrentAxes» фигуры.

В GUIDE вы можете пометить данную ось, например: http://www.mathworks.com/help/matlab/creating_guis/gui-with-multiple-axes-guide.html . Затем в вашем коде рисования укажите, какая ось должна быть построена с помощью функции «set» и свойства «CurrentAxes».

Ниже приведен простой пример, хотя он не использует GUIDE, а обрабатывает только базовую ось подграфика:

% plots in most recent axis by default (ax2)
fig = figure;
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);
plot(rand(1,10));

% indicate that you want to plot in ax1 instead
fig = figure;
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);
set(gcf, 'CurrentAxes', ax1);
plot(rand(1,10));
person DMR    schedule 17.12.2013
comment
Мне нужно использовать GUIDE, потому что позже я добавлю раскрывающееся меню и т. д. для других функций. Мои рисунки, как указано выше, не используют функцию графика. Я использую функцию прямоугольника для создания полного графика, так как я могу сделать это с помощью этой функции? Кроме того, поскольку в этом примере не используется GUIDE, я не уверен, как разделить код между определяемым пользователем файлом и связать его с файлом графического интерфейса, чтобы я мог использовать его с дескрипторами. - person loco; 18.12.2013
comment
Вы можете добавить раскрывающиеся меню, кнопки, флажки и т. д., используя uicontrol. - person craigim; 18.12.2013