본문으로 바로가기

[MATLAB 연재] 16. GUI - 종합예제

category Software/MATLAB 2010.04.29 11:48

본 강좌에 사용되는 MATLAB은 버젼7.9.0 (R2009b)을 대상으로 합니다.

폼나는 예제하나 만들어 보자 !

이제껏 몇 회에 걸쳐서 GUI환경의 프로그램에 대해 이야기 했습니다. 지금까지의 연재 내용을 가지고 폼나는 뭔가를 한번 해봐야겠네요^^. 

이걸 만드는 거죠. 위에 보이다시피 진폭, 주파수, 위상차를 입력하면 그래프를 그리는 겁니다. 그냥 그리면 폼이 안나니까...^^ 한번 그리고, 또 AddFunction이라는 버튼을 누르면 '+'로 또 그리는 걸로 하죠. 괜찮겠는데요...^^

저렇게 그려줍니다. 또 다른 함수를 만들어서 AddFuncion을 눌러주면

저렇게 그려주는 거죠^^, 입력했던 수식도 글자로 나오고. 그림도 그리는....ㅋㅋ^^

GUIDE에서 화면 구성 및 태그, 속성 결정 !

일단 화면 구성 해야겠죠.

저렇게 EditBox 7개와 Axes 1개, sin과 cos을 결정할 PopMenu 1개와 Pushbuttion 1개를 배치합니다. 

이제는 프로그램이 조금 복잡해지니까 tag들을 변경해서 알기 쉽게 두도록 하죠. 윗 줄에 각 edit text들의 tag를 표시해두었습니다.

그리고, Popup Menu의 tag도 잡아주구요

그 다음 edit text 2개의 tag도 잡습니다. 그리고, Terms는 사용자에게 입력받을 것이 아니기때문에, inspector window에서 enable이라는 속성을 찾아서 off로 바꿔줍니다. 그러면, 프로그램에서는 string 속성을 만져서 글자를 바꿔줄 수 있지만, 사용자가 편집하지는 못합니다. 

그 다음 수식의 결과가 나오는 edit text의 태그와 enable 속성입니다. 앗.. 오타네요. Tag : dispEqu 입니다.

마찬가지로, 혹시 모를 에러코드를 표현할  edit text입니다. 나머지 언급하지 않은 것은 모두 static text입니다.

Call Back 함수 작성하기 !

사용자가 입력을 완료하고 Push Button을 누르면 그리도록 할 것이니 Push Button의 CallBack함수에 모든 코드를 위치시키겠습니다.

먼저, edit text, popup menu에서 이미 언급한데로 변수와 함수종류를 받아(get)옵니다. 

이게 기본 뼈대인데요. 제일 첫 줄은 sin이나 cos이 더해지는데 각 항 별로 시간축의 범위가 다르면 이상하겠죠.? 그래서 한번 입력하고 나면, 다시 종료시간을 수정할 수 없도록, enable속성을 off로 강제로 두는 겁니다. 그리고, 그림은 항수(많으면 귀찮으니까)가 4개이하로, 진폭과 주파수가 '0'이 아닐때, 그리도록 하는 것입니다. 나머지 상황은 에러코드로 정의해둡니다. 그렇다면, MAIN CODE라고 되어있는 부분과 Error CODE라고 되어있는 부분만 건드리면 되겠네요.

항수를 체크하기 위해 count를 세는 것입니다. 그리고, 그 다음줄은 화면에 항 수를 넣어두구요. 그리고, 사용자의 입력 수식의 이전결과가 dispEqu 태그의 edit text에 있을테니 그걸 가져 오는 겁니다. 만약 첫 항이라면, Nothing이라는 값이 있을테니, 그런 경우는 공란(' ')으로 두도록 되어있구요. 그리고 뒤에 '+'기호를 넣어두는것이죠. 역시 설명한 적이 있는 eval 명령을 이용해서 전체 수식을 만드는 부분입니다. 이 코드 그 다음에는

실제 그림을 그리는 부분이 들어갑니다. subs명령이 보이는데요. 이는 문자열중에서 문자 't;를 변수 t로 변환시켜줍니다. 따옴표(')가 있고 없고의 차이죠^^. 그러면, y에 바로 수식의 결과값이 저장되는 거죠. 나머지는 그려주는 건데요. 'ylim'속성에 1.1을 곱한 이유는 보기 편하게 10%의 여유를 둔 것입니다.

그리고, 에러코드는 해당하는 순서대로 문자열로 저장해두고 호출하는 방식입니다. 이렇게 하면 끝났네요^^

fig 화일은 

guiTestV2.fig

이구요. m화일은

guiTestV2.m

입니다.

음... m화일의 전체코드는

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

Amp = str2double(get(handles.Amp, 'String'));
Freq = str2double(get(handles.freq, 'String'));
PhaseShift = str2double(get(handles.PhaseShift, 'String'));
endTime = str2double(get(handles.endTime, 'String'));
count = str2double(get(handles.count, 'String'));
contents = cellstr(get(handles.targetFunc, 'String'));
TargetFunc = contents{get(handles.targetFunc, 'Value')};

set(handles.endTime, 'enable', 'off')

if (count>=0)&&(count<=3)&&(Amp~=0)&&(Freq~=0)
    errorCode = 1;
    count = count + 1;
    set(handles.count, 'String', count);
    preEqu = get(handles.dispEqu, 'String');
    if strcmp(preEqu, 'Nothing')
        preEqu = '';
    else
        preEqu = eval([' '' ' preEqu ' + '' ']);
    end
    reEqu = eval([''' ' preEqu '' num2str(Amp) '*' TargetFunc '(2*pi*' num2str(Freq) '*t +' num2str(PhaseShift) ') ''']);
    set(handles.dispEqu, 'String', reEqu);


    t = 0:0.01:endTime;
    y = subs(reEqu, 't', t, 0);

    plot(handles.axes1, t, y)
    set(handles.axes1, 'xlim', [0 endTime], 'ylim', [min(y) max(y)]*1.1, 'xgrid', 'on', 'ygrid', 'on')

elseif count>3
    errorCode = 2;
elseif Amp==0
    errorCode = 3;
elseif Freq==0
    errorCode = 4;
end

ErrorMsg = {{'Correct Expression'}
    {'Too many terms'}
    {'Amplitute is ''0'''}
    {'Frequency is ''0'''}};

set(handles.ErrorCode, 'String', ErrorMsg{errorCode});

입니다.^^

이제 길었던 MATLAB 기초연재를 마무리 합니다. 뭐 어차피 제 블로그의 MATLAB 카테고리에서는 계속 MATLAB이야기를 하겠지만 말이죠^^.


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. GUI 오늘 시작 2011.08.18 16:33 신고

    안녕하세요
    글 잘읽었구요 실습도 해봤습니다. 감사합니다.
    그리구여....
    GUI에 대해서 궁금한게 있는데요
    혹시 push butten을 누르면 팝업창 뜨면서
    제가 저장한 텍스트 파일의 경로를 찾아서 더블 클릭하면
    아래 List box에 그 텍스트가 쭉 나열되게끔 하는게 가능한가여?
    그래서 그 텍스트가지고 플롯을 하려고 하거든여.....
    정말 초보여서 이런게 가능한지 궁금합니다.

    • BlogIcon PinkWink 2011.08.19 10:07 신고

      안될것 없다는 생각이 살짝 듭니다만, 실제 구현은 저도 해보지 않았고, 가능성을 타진할려면 help나 document를 찾아서 관련 명령들로 스토리를 짜봐야할 듯합니다.
      해보지 않아 뭐라 드릴 말씀이 없네요...ㅠㅠ

  3. GUI 오늘 시작 2011.08.19 11:53 신고

    넹,,, 감사합니다,,

  4. MATLAB제발!!! 2011.09.06 01:49 신고

    안녕하세요! 여기저기 찾아보다가..궁금한 사항이 있어서 질문드립니다.

    제가 이번에 AVR과 매틀랩 간의 통신을 해서 근전도 신호처리를 할게 있는데 통신에서 막혀버려서..

    제가 궁금한 것이 무엇이냐면..
    avr에서 지속적으로 데이터값을 계속 송신해 주면
    그것을 매틀랩 GUI 그래프 창에 계속적으로 그려주는 것을 하려고 합니다.
    avr에서는 지속적으로 printf를 써서 숫자를 보내는것을
    코드비젼으로는 확인하였는데 매틀랩에서 그래프를 그려보자니 영 방법을 모르겠습니다..
    이거 보시면 꼭 알려주시면 감사하겠습니다.ㅠ

    그냥 간단예제로 본것은


    for i=1:1000
    plot(i,i,'b.');
    hold on
    drawnow;
    end




    이처럼 hold on과 drawnow를 써서 그냥 커맨트 창에서 구현 한 것인데요..

    제가 궁금한거는..



    gui창에서 push버튼을 눌렀을때 통신이 연결되면서,

    하나의 변수에 수신된값이 들어오면, 그것을 계속적으로 그래프창에 그려주는 것입니다.

    이것을 해결하기가 쉽지가 않네요..;


    이것 보시면 제발 꼭 알려주시면 감사하겠습니다.

    • BlogIcon PinkWink 2011.09.06 09:14 신고

      MATLAB에서 serial 통신을 해서 수신된 데이터를 GUI환경에서 그래프로 표현하고 싶다는 말씀이시군요.
      먼저 MATLAB에서 시리얼 통신이 되는지를 확인하시기 바랍니다.
      document에서 serial이라고 검색하시면
      간단히 serial 환경을 세팅하고, 통신하는 방법이 나와있습니다.
      저도.. 아주 오래전이라 기억이 나지 않지만,
      당시에 저도 document에서 serial통신이라고 검색해서 찾았던것 같습니다.

  5. MATLAB제발!!! 2011.09.07 20:26 신고

    COMPORT = 'COM1';
    s = serial(COMPORT,'BaudRate', 9600, 'DataBits', 8, 'parity', 'none','stopbits',1);
    fopen(s)
    을 이용해서 연결을 하고
    y=fread(s)
    를 통해서 y에 통신값이 저장되는 것을 봤습니다.

    하지만 두가지 궁금한점이 또 생겼는데요..;
    통신을 통해 매틀랩에서 받은 값은 아스키 값으로 들어오는 것 같습니다.
    코드비젼 시리얼통신값은 십진수값이 들어오는 것을 확인했었는데
    매틀랩은 32~57의 범위가 뜨더라구요..
    혹시나해서 송신에 1을 날렸는데 1의 아스키코드값인 49가 출력되었습니다.

    매틀랩에서 아스키값을 십진수로 바꿔받으려면 어떻게 해야 하는 것인가요?;


    또 실시간으로 그래프를 그려주기 위해서는 어떻게해야하나요?
    지금은 버튼누르면 for문에 한계치 범위를 정해놓고 그만큼만 그리게 해놨는데
    인위적으로 통신을 종료할때까지 무한히계속 그리게 하려면 어떻게 해야 하나요?

    또 여태까지는 y라는 변수 하나에 한채널의 데이터 값을 받아서
    그것을 그대로 그리기만 하였는데요,
    만약에 y라는 변수에 1개의 채널이 아니라 4개의 채널에 해당하는 십진수 값을
    1바이트에 싣어 보내고 그것을 나눠서 매틀랩변수에 저장하는 것은 어떻게 해야 하나요?

    왜냐면 제가 8개의 채널에 해당하는 근전도 값을 동시에 실시간으로 그래프를
    그려야 하기 때문에 이런 질문 드립니다.;

    • BlogIcon PinkWink 2011.09.09 10:56 신고

      아스키값을 문자로 변환해주는 함수가 있을것 같습니다. 뭐 모른다고 해도, case문으로 바꿔주면 되니까 큰 어려움은 아닐것 같구요.
      변화하는 값을 계속 그래프로 표현하고 싶으시다면, 간단히 테스트를 해보시면 됩니다.
      figure를 하나 열고, 간단히 hold on을 시킨다음, 계속 그림을 그리라고 command창에서 명령을 줘보시면, 확인하실 수 있습니다. 이 간단한 방법이 괜찮다면 그대로 사용하시면 되구요.
      표현상에 문제가 있어보인다면, 사실, figure의 속성을 어마어마하게 파야하는 일이 생길 수도 있습니다.

  6. yoonsmith 2011.10.18 15:56 신고

    정말 큰도움을 받고 있습니다.
    제가 해야할게 시간에 따라 2개의 어떤 값을 한 그래프에 plot 해야 하는데,
    시간에 따라 x 축이 변하게 하여 시간에 따른 값들을 그래프상에서 보여주고 싶습니다.(real time 으로..) 이럴땐 어떡하면 좋을까요 ? 도저히 감이 오지 않네요 ㅠ

    axes가 하나 있을 경우 for 문으로 xlim 을 변화시켜 시간에 따라 변화하는 그래프를 그리는데 성공하였는데 axes 하나를 더 추가하면 두개의 값중 하나만 그래프에 plot 되네요 ㅠㅠ

    function pushbutton1_Callback(hObject, eventdata, handles)
    t=0:0.1:10000;
    y1=5+sin(2*pi*t);
    y2=5+cos(2*pi*t);
    plot(handles.axes1,t,y1)
    hold on
    grid on
    plot(handles.axes1,t,y2,'r')

    set(handles.axes1,'ylim',[3 7])
    set(handles.axes1,'xlim',[0 5])

    %plot(handles.axes3,t,y1)
    %grid on
    %set(handles.axes3,'ylim',[3 7])
    %set(handles.axes3,'xlim',[0 5])
    for i=0:0.1:20
    temp1=i;
    set(handles.axes1,'xlim',[temp1 5+temp1]);
    drawnow;
    end

    • BlogIcon PinkWink 2011.10.18 20:22 신고

      글쎄요. 저도 잘 모르겠습니다.
      테스트를 해서 분석해보면 되겠지만,
      현실적인 시간이 그걸 허락해주질 않는군요.
      (요즘 무쟈게 바쁘거든요)
      도움이 되지 못해 죄송합니다.

  7. yoonsmith 2011.10.19 11:35 신고

    시간이 걸리더라도 제가 해결해보겠습니다 ㅎㅎ

    한가지 여쭙고 싶은건 GUI 상에서 실시간으로 모니터링 하는게 목표입니다.

    앞서서는 for 문을 통해 그래프의 x축(시간)을 이동해주는 거처럼 보여주며 비슷하게 구현하였는데요..

    실제로 이 x 축이 실제 시간과 같이 움직이면서 그래프를 보여주려면
    프로그램 내부 혹은 컴퓨터의 내부 clock과 연결이 되어야 한다고 생각하는데
    매틀랩에서 실시간으로 구현하는게 가능 할까요 ? ㅠ

    • BlogIcon PinkWink 2011.10.19 12:38 신고

      다른말은 다 빼고. 실시간 모니터링만 생각해보겠습니다.
      어느정도 실시간인가 하는 문제가 있지만,
      외부에서 데이터를 받아 오는 거라면,
      MATLAB도 시리얼통신을 지원합니다.
      시리얼통신을 통해 데이터를 수집하고 가공이 가능합니다.
      흔히 말하는 RTOS수준의 실시간이라면
      그것은 MATLAB의 문제가 아니라 윈도우의 문제(윈도는 실시간 OS가 아니니까요)로 힘들 수도 있습니다.
      (물론 MS에서 실시간 모듈을 배포하는 것으로 알고 있지만)
      그 이외에 말씀하신것처럼 clock과 for를 사용한다는 것은 살짝 이해가 되지 않습니다.
      흔히 실시간모니터링이라는 것은 외부데이터를 수집하고 가공하는 것을 데이터수집시간에 맞춰 실시간으로 수행하겠다는 의미이지 않나요?

  8. yoonsmith 2011.10.20 14:14 신고

    답변 감사드립니다. 아직 시뮬레이션 단계라서 아직은 외부데이터를 받지 않고 임의의 그래프(sin cos)를 실시간으로 변화하는걸 그리고 있어요.ㅎ
    x축을 시간축으로 삼아서 x축의 이동속도가 실제 시간과 같게 하는걸 찾고 있거든요. ㅎ for문에서 i 간격을 조절해서 계산양을 늘려 그래프가 실제시간과 비슷하게 움직이는 거 같은 착시? 현상을 구현하긴 하였는데, 실제 시간과 같이 움직이게 하려고 이거저거 찾아보고 있었어요. timer나 tic toc 을 쓰는거 같아서요.

    시뮬링크를 보니 직접 block 을 만들어서 하는 법도 있더군요. (http://www.mathworks.co.kr/matlabcentral/fileexchange/21908-simulink%C2%AE-real-time-execution)

    제가 사실 기계공학 전공이라 매틀랩을 거의 처음 다뤄보는데 어렵네요. RTOS 이런 단어 너무 생소하네요 .ㅠ

    • BlogIcon PinkWink 2011.10.20 23:40 신고

      네 그렇군요. 그렇게 연습하시는거라면. 딱히 제가 드릴 말씀이 별자르게 있지는 않는것 같습니다^^.
      그래도 좋은 공부를 하고 계시는 군요. 역시 좋은 성과가 있으시기를 빕니다^^

  9. 박선미 2012.02.05 22:39 신고

    안녕하세요.matlab을 공부하는 학생입니다.
    이번에 매트렙GUI로 그래프를 그려야하는데 잘 모르겠어서요;;
    그래프를 원의 바깥쪽으로 등각도로 24개를 그릴 예정인데 2-D로 그래프의 축도 같이 돌아가야 하는거든요. 그런데 그래프의 축 자체를 돌리는 것을 어떻게 해야 하는지 잘 모르겠습니다. 인터넷을 찾아봐도 나오는 것이 없구요..지금 책을 보고 있긴 한데 책에도 자세히 안나와 있습니다..ㅠㅠ 뎃글 보시면 답변 부탁드립니다..ㅠㅠ

    • BlogIcon PinkWink 2012.02.06 08:32 신고

      글쎄요. 그림이야 그냥 돌리면 되지만 기준축도 돌려야한다는 말씀이신가요?
      도큐먼트에서 3D rotation으로 한번 검색해보시는걸 권해드립니다.
      예전에 rotate3d라는 명령이 있었던것 같은데, 그게 의도하시는 기능이 정확히 맞는진 자신이 없네요.

  10. David 2012.03.16 12:12 신고

    안녕하세요 여기서 너무 많은 것을 알아가서 너무 감사드립니다.
    거의 대부분의 것을 강의를 보면서 해결했습니다. 정말 감사드립니다.
    그런데 제가 궁금한 것이 있는데요. 제가 워낙 matlab을 잘 몰라서 간단할 것 같은데 잘 모르겠네요;;;

    보통 GUI 구성한 것 말고 일반 m 파일에서는 파일을 돌렸을 때의 변수가 Workspace에 표현이 되잖아요.
    그런데 GUI 구성이후에는 뜨지 않더군요.
    이것을 Workspace에 나오게 할 수 없나요?
    지금 제가 한 작업이 영상의 일부분을 네모로 잘라서 그 각각의 column 들의 평균값을 구한 후 그것을 plot하는 작업을 했는데요.
    여기서 평균값을 구한 것의 각각의 값을 알아야 합니다. 그런데 그것을 표현해내기가 쉽지 않네요.
    Workspace에 뜨게 할 수 없다면 GUI 상에서 간단하게 표현할 수 있는 방법이라도 알고 싶네요ㅜㅜ
    부탁드리겠습니다. 감사합니다.

    • BlogIcon PinkWink 2012.03.16 14:39 신고

      네... GUI는 함수내부에서 설정된 변수들이라 workspace에 나타나지 않습니다. 방법들이 많겠지만, 가장쉽게 접근할 수 있는 방법이 global로 선언하는 겁니다.
      global 변수이름
      이렇게 두시고, 사용하시면 됩니다.

  11. sumi 2012.05.17 16:16 신고

    안녕하세요. gui를 이용하여 프로젝트 중인데 이곳에서 많은 정보를 얻어 도움이 많이 되었습니다.
    혹시 gui를 이용해 어떤 계층의 구조화(hierarchy)를 나타낼 수 있는 지 궁금합니다.
    axes에 phytree함수를 이용하여 표현하려 하였으나 제가 생각하기에는 2진트리로 최적화 되어있는 것 같아
    제가 원하는 계층 구조를 나타낼 수가 없습니다.ㅜㅜ 뻗어나가는 가지들을 3개씩으로 하고 싶은데 아무리 해도 방법이 없네요 ㅜㅜ 혹시 방법 알고계시면 답변 부탁드려요 . 감사합니다.

    • BlogIcon PinkWink 2012.05.18 11:57 신고

      ㅎㅎㅎ 죄송합니다. 좀금더 풀어서 설명해주시면 제가 질문은 이해할 수 있지 않을까합니다만, 그래도 답을 드리기는 어려울 것 같습니다. 잘 모르는...ㅠㅠ

  12. belloth 2013.11.17 16:20 신고

    안녕하세요. 블로그 정말 큰 도움이 되고 있습니다!
    근데 막히는 부분이 있어서 하나 질문하려구요!!

    지금 GUI를 이용해서 figure 하나를 만들었습니다. 그런데 GUI를 이용해서 하나의 figure2를 더 만들고
    figure1에서 구해지는 어떠한 값을 figure2에서 나타내려고 합니다.
    예를 들면 figure1에서 숫자 5라는 값이 나왔습니다.
    그러면 이 값을 figure에서 5가 상승하는 막대그래프를 그리려는.. 대충 뭐 이런 생각인데요

    그럼 여기서, figure1에서 push버튼을 이용해서 figure2를 실행시킬 수 있을까요? 있다면 어떠한 코딩을 해야할까요?
    그리구 figure2가 실행이 되었다면 어떻게 figure1에서의 값을 받아올 수 있을까요..??

    너무 두서없이 쓴거같은데 답변 가능하시다면 부탁드립니다.. (--)(__) !!

    • BlogIcon PinkWink 2013.11.17 16:50 신고

      네... 잘 모르겠습니다. 변수를 받는데 꽤 어렵다면 가장 쉽게 할 수 있는건 그냥 글로벌 변수로 선언해서 사용하는겁니다.

  13. ojshero 2014.03.31 02:03 신고

    안녕하세요 블로그가 진짜 큰 도움이 되고 있습니다
    한가지 데이터저장을 어떻게하는지 궁금합니다.

    gui에서 계산된 값이 workspace에서 확인을 할수 없기에 이것들을 텍스트파일같은것으로 저장하고싶은데요

    gui에서 계산한 값을 워크스페이스상에서 확인하거나 아니면 텍스트파일로 저장할 수 있나요??

    gui 코딩에서 save 파일이름 변수명 -ascii 하니깐 안되더라구요 ㅜㅜ

    도와주시면 감사하겠습니다.^^

    • BlogIcon PinkWink 2014.03.31 13:05 신고

      함수 내부에 있는 변수를 확인하고 싶다는 것이죠...
      급하게 제일 간단히 쓸 수 있는건 저장하고 싶은 변수를 함수밖에서 글로벌로 선언해 버리는 겁니다. global이라는 단어를 변수앞에 달아주시면 되지요^^

    • ojshero 2014.03.31 13:31 신고

      답변감사합니다. 저 그런데 제가 잘못선언한 것인인지 글로벌선언이후에도 워크스페이스상에 아무런 변수가 생성되지 않습니다. ㅜㅜ

      참고로 코딩은 아래와 같이 하였습니다. 바쁘시지 않을때 답변주시면 감사하겠습니다.

      global Matr;
      function pushbutton1_Callback(hObject, eventdata, handles)

      [변수선언문] e.g. input=str2double(get(handles.input,'String'));
      [계산식 선언문] e.g. force=2*input
      [그래프출력선언문]
      e.g. set(handles.force,'String',force)
      plot(handles.axes1,input, force)

      [워크스페이스 확인용 선언문] e.g. Matr=[input force];

      와 같이 하였구 그래프를 통해서 그래프출력문까지는 문제가 없음을 확인하였습니다. 그리고 매트랩 커맨드윈도우창에서 아무런 에러메세지 또한 없네요 ^^;

    • BlogIcon PinkWink 2014.04.02 09:23 신고

      아이쿠 저런~ 제가 지금 일하는 곳에 MATLAB이 깔려있지 않아서ㅠㅠ
      커맨드 창에서

      doc global

      이라고 해서 예제를 한 번 보세요. 현재는 제가 테스트를 해서 확인할 만한 연건이 되지를 않습니다. 좀 있음 괜찮아질듯하지만^^

  14. baracksj 2014.04.07 14:05 신고

    안녕하세요!
    제가 공부하는것이랑 위의 글이랑 관련이없는데,, 이것저것 찾아보다가 모르겠어서
    이렇게 글을 남깁니다.

    저는 xyz 축을 갖는, 즉 3-D 에 제가 원하는 점에 어떤 이미지를 띄우고싶거든요....
    이것을 하려면 올려주신자료에서 어떤 부분을 참고해야할지요?

  15. 김미소 2014.12.06 15:07 신고

    안녕하세요, 정말 따라하기 쉽게 되어있어 즐겁게 공부하고 있습니다.
    다름이 아니라.. GUI에서 Plot이 아닌 contourf함수를 사용하여 그래프를 나타내고 싶은데 plot과 같은 형식으로 쓰면 구현이 되지 않아서요ㅜㅜ 어떻게 하면 좋을까요ㅜㅜ

    • BlogIcon PinkWink 2014.12.07 20:53 신고

      정확하진 않은데,
      http://kr.mathworks.com/help/matlab/creating_guis/about-the-simple-guide-gui-example.html
      에서는 가능하다고 안내를 하고 있네요. 한번 읽어보세요^^

  16. 후햐호히 2014.12.06 18:01 신고

    안녕하세요
    gui에대한글잘읽었는데요
    제가gui로프로그램을 만들고있는데
    질문좀드려도될까요??

  17. 후햐호히 2014.12.15 01:58 신고

    제가 푸쉬버튼두개를 넣어서
    하나를 누르면 제가 만들어둔 매트랩 프로그램이 실행되고
    또다른버튼을누르면 정지되는 그런프로그램을 하려고하는데
    어떻게 할수있나요??

    • BlogIcon PinkWink 2014.12.15 12:07 신고

      요글래 이런 질문을 많이 받는데요. 이건 대답하기 어렵습니다. 저는요...ㅠㅠ.
      왜냐면 질문하신 내용이 답변이거든요. 버튼을 만들고 뭔가를 실행시켜야하니까.. 그걸 학습하셔야죠. 버튼을 어떻게 만드는지는 지금 댓글을 달아놓은 이글 연재에 있답니다.ㅠㅠ.
      살짝 도움이 되지 못했네요... 좋은 성과있기를 바랍니다.^^

  18. 후햐호히 2014.12.15 18:22 신고

    그럼 gui에 영상을 띄우게 할수도있나요??

  19. 후햐호히 2014.12.17 09:14 신고

    답변감사합니다

    영상을띄워야하는데

    그게문제네요ㅠㅠ

  20. 이지형 2016.01.10 14:48 신고

    정말 독학하느라 힘들다 돌고 돌아 찾게되었는데 정말감사합니다~~~

  21. 아기해츨링 2018.06.21 00:22 신고

    안녕하세요. 회사 생활 초반부터 많이 도움받았었는데, 이렇게 질문을 남기게 되었습니다.
    아주 오래된 글이라 보실지 잘 모르겠는데 꼭 부탁드립니다!! ( 포스팅 관련된거에요!)
    다 답변 안해주셔도 됩니다~

    1. GUI를 통해 불러온 파일 활용하기..
    - 오실로스코프로 찍은 RF 파형 FFT 하는 코드를 GUI로 만들어보고있습니다.
    Push 버튼 이용해서 파일열기로 파일 입력해서 배열 형태로 저장을 했습니다.
    근데 이 파형 data를 불러와 놓고.. FFT 할때 이것저것 바꿔가면서 Plot을 하고싶은데요..
    Push버튼을 눌러서 data를 저장해놓고 다름 함수에서 이 파형 raw data를 불러오는 방법이 궁금합니다.
    Push버튼에 해당하는 callback 함수 내부에서는 다 잘되는건 확인 했습니다.
    문제는.. 다른 Push 버튼을 만들어서 조건 바꿔 Plot만 딱딱 하고 싶은데
    다른 Puch 버튼 callback 함수안으로 가면 위에 불러왔던 파형 data가 없어지네요..
    예를들어.. 파형을 FFT 할때 분석하고싶은 주파수를 변경한다고하면.. 원하는 주파수 입력 받아서
    Plot만 하고싶은데 지금은.. 파일 불러오는거부터 다시 해야만 하네요..
    파형 앞에 global 써서 전역 변수? 로 해봤는데도 안되네요..

    2. plot 된 그래프 설정 및 데이터 추출
    - plot(handles.axes1,x,y) 로 그려진 그래프에 Slide bar 말고 드래그로 영역 지정해서 확대하는 기능을 넣을수 있는지 궁금합니다.
    아니면 Figure 명령으로 창 띄웠을때 나오는 메뉴들 ( 저장, 인쇄 ) 이런것들이 그냥 GUI상에 나오게 할수 있는 방법이 궁금합니다.

    3. 이렇게 만든 GUI를 매트랩이 없는 환경에서 *.exe 형태의 실행파일로 만들어서 쓸수 있나요?
    있다면 방법이 궁금합니다..

    • BlogIcon PinkWink 2018.06.21 09:38 신고

      global로 선언해서 사용하셔도 되구요...
      별도의 mat 파일로 저장한 다음
      다른 함수에서 읽도록 해도 될 듯 합니다.
      함수에 대해 조금 더 익숙하시다면, 출력에 잡아줘도 되는데.. 일단 시작은 쉽게 가시죠^^

      두번째 질문은 제가 MATLAB이 없어서 찾아 보기가 좀 어렵네요^^

      세번째는 네. 가능합니다. MATLAB도 배포 가능한 형태로 만들 수 있습니다.
      Create Standalone Application from MATLAB
      이라고 검색하면 mathworks의 공식 문서가 나타날겁니다.