使用句柄将数字导入MATLAB GUI?

时间:2013-12-17 17:34:53

标签: matlab loops user-interface plot handles

我怎样才能将这些数字放在GUI的轴窗口中?

我不确定在下面的示例中,在我的用户定义代码中放置句柄的位置。我总共有4个数字,看起来与这个例子类似。我希望4个数字显示在我的GUI窗口而不是单独的窗口中,所以我在.fig文件中创建了4个轴窗口。

此特定图形的代码根据MyVariable中的值是1还是0来绘制66个黑白矩形的网格。如果MyVariable为1,则为黑色,白色如果MyVariable为0.我有一个用于我的.fig GUI的文件,一个用于控制GUI的文件和一个用于链接到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

上面代码的数字如下所示: enter image description here

函数定义包含所有4个图的所有脚本代码,因为我之前没有将脚本分区为单独的函数。

我的GUI脚本代码包含:

   MyScript(handles);

2 个答案:

答案 0 :(得分:2)

您可以通过设置图形的“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));

答案 1 :(得分:2)

正如DMR所说,设置' CurrentAxes'是必要的。例如,如果要绘制带有标记名称' axis1'的轴。你应该简单地添加:

axes(handles.axes1);

代码。下面是一个包含'轴1'的图形的一个非常简单的示例。和'轴2'使用上面的代码(更正的)代码。我不是真的想要在你的gui本身或一个单独的人物的轴上绘图。我希望我能涵盖这两种情况。

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;

您的指南GUI应如下所示: enter image description here

你的结果如下: enter image description here