슬라이더를 움직여 플롯을 조작하는 방법: GUI 만들기
사용 환경: MATLAB R2017a
사용한 도구 상자: n/a
도전
시간 변화가 있는 2차원 플롯에서 시간 변화를 보고 싶은, 3차원 데이터의 슬라이스 플롯을 그릴 때에 슬라이스 위치를 이동시켜 묘화하고 싶다. 그럴 때 편리한 슬라이더로 조작을 MATLAB에서 구현하고 싶습니다.
MATLAB의 Q&A 사이트 MATLAB Answers 에도 투고가 있습니다만, 슬라이더 바를 조작해 묘화를 만지는 방법은 의외로 안쪽이 깊다. 슬라이더를 조작하는 경우, uicontrol 로 지정하는 Callback 함수는 슬라이더를 마우스로 이동시켜 끝났을 때 밖에 실행되지 않기 때문에, 슬라이더를 마우스 이동시키면서 플롯을 변화시키고 싶은 경우에는 사용할 수 없다. .
마우스가 클릭된 상태의 경우에 처리를 실시할 수 있는 WindowButtonMotionFcn 로 실현도 가능하면 있으면 별로 아름답지 않다. .
참고 : 슬라이더를 움직여 마우스를 누른 상태에서 그래프 위치를 조정하는 등의 처리를 넣는 것이 가능합니까?
addlistener
여기에서는 addlistener 를 사용해 보겠습니다. 자세한 것은 이벤트 및 리스너 개요 에 설명되어 있으므로 생략 합니다만, 요점은 슬라이더 바가 변화했다고 하는 이벤트를 검지해, 플롯을 변화시키는 처리를 순차적으로 실행합니다. 이 기능을 사용하여 슬라이더 바의 조작을 동적으로 플롯에 반영시켜 보겠습니다.
데이터는 스칼라 볼륨 데이터 시각화 기술 에서 사용되고 있는 「사람의 머리의 27 개의 이미지 슬라이스인 일련의 MRI 데이터 세트」를 사용하고 있습니다. MATLAB에 들어 있는 데이터이므로, 이대로 copipe로 실행할 수 있을 것.
% データ読み込み
load mri
D = squeeze(D);
% Plot
figure(1)
[~,handle_surf] = contour(D(:,:,1));
title('スカラー ボリューム データの可視化');
% スライダーバー作成
handle_slider = uicontrol('Style','slider','Position',[10 50 20 340],'Min',1,'Max',27,'Value',1);
% イベントリスナーの作成
addlistener(handle_slider,'Value','PostSet',@(event,obj) update(event,obj,D,handle_surf,handle_slider));
% 描画のアップデート処理用関数
function update(event,obj,D,handle_surf,handle_slider)
index = round(handle_slider.Value);
handle_surf.ZData = double(D(:,:,index));
end
Reference
이 문제에 관하여(슬라이더를 움직여 플롯을 조작하는 방법: GUI 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eigs/items/9e1bee76a256f38824d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)