2013-12-17 2 views
3

어떻게 문자 그대로이 숫자를 가져 와서 GUI의 축 윈도우에 배치 할 수 있습니까?핸들을 사용하여 MATLAB GUI로 수치를 가져 옵니까?

아래 예에서 사용자 정의 코드에 핸들을 배치 할 위치가 확실하지 않습니다. 이 예제와 비슷한 총 4 개의 숫자가 있습니다. 4 개의 그림을 GUI 창과 별도의 창에 표시하지 않기를 바랍니다. 그래서 .fig 파일에 4 개의 축 창을 만들었습니다. MyVariable가, 화이트 1 인 경우 MyVariable 내가이 0 인 경우

이 특정 그림에 대한 코드는 MyVariable의 값이 1 또는 0 블랙 여부에 따라 66 개 검은 색과 흰색 사각형의 격자를 그립니다 내 .fig GUI 용 파일, GUI를 제어하는 ​​파일 및 GUI에 링크되는 사용자 정의 코드가있는 파일. 위의 코드에 대한

% 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 

사이의 그림의 코드

function test = MyScript(handles) 

많은은 다음과 같습니다 enter image description here

함수 정의는 4 플롯 내 스크립트 코드가 모두 포함 이전에 스크립트를 개별 기능으로 분할하지 않았기 때문입니다.

내 GUI 스크립트 코드가 포함되어 있습니다 : 당신은 그림의 'CurrentAxes'속성을 설정하여 이전에 각 플롯 명령에 음모 축을 설정할 수 있습니다

MyScript(handles); 

답변

2

은, 그것은 'CurrentAxes'을 설정하는 모든 necesary입니다 :

간단한 예는 가이드를 사용하지 않습니다하지만, 기본적인 부가 적 줄거리 축 핸들, 다음과 같습니다. 예를 들어 태그 이름이 'axis1'인 축에 플롯하려는 경우

을 코드에 추가하면됩니다. 아래는 위의 코드 (수정 된) 코드를 사용하여 'axis1'과 'axis2'가 포함 된 그림의 아주 간단한 예입니다. 당신이 당신의 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

+0

감사합니다. 축 값이 여전히 내 플롯 중 3 개에 표시되지만 원하지 않는 경우이 문제가 해결되었습니다. 이것은 내가 가지고있는 이미지입니다. https://dl.dropboxusercontent.com/u/104069213/GUI%20example%201.png 그림 'West Wall Array'는 내가 원하는 형식입니다. '배열'이라는 다른 이미지는 이미지에 값을 가지며 이미지는 비뚤어집니다. 그들은 GUI에 넣기 전에 이렇게 보이지 않았습니다. 이것은 '서쪽 벽 배열'과 같은 별도의 그림으로 보입니다. https://dl.dropboxusercontent.com/u/104069213/GUI%20example%202.png 의견이 있으십니까? – loco

+0

신경 쓰지 마라. 나는 내 문제를 해결했다. 다시 한번 감사드립니다. – loco

2

.

GUIDE 내에서 특정 축에 태그를 지정할 수 있습니다 (예 : http://www.mathworks.com/help/matlab/creating_guis/gui-with-multiple-axes-guide.html). 그런 다음 드로잉 코드 내에서 'set'함수와 'CurrentAxes'속성을 통해 플롯 할 축을 지정하십시오. DMR의 SAIS으로

% 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)); 
+0

풍모. 위에서 언급 한 내 그림은 그래도 플롯 기능을 사용하지 않습니다. 사각형 함수를 사용하여 전체 플롯을 생성하므로 함수를 사용하여 어떻게 할 수 있습니까? 또한이 예제에서는 GUIDE를 사용하지 않기 때문에 사용자 정의 파일 사이에 코드를 분할하고 GUI 파일에 연결하여 핸들과 함께 사용할 수 있는지 확신 할 수 없습니다. – loco

+0

드롭 다운 메뉴, 누름 버튼, 체크 박스 등을 추가 할 수 있습니다.[ 'uicontrol'] (http://www.mathworks.com/help/matlab/ref/uicontrol.html) 명령을 사용하십시오. – craigim