2012-05-25 3 views
1

플롯에서 디스플레이 변수 4 개를 표시하는 방법을 파악하는 데 문제가 있습니다. 은 Y의 함수 AND X.데이터 커서가있는 4D 플롯 디스플레이 변수 Matlab

이 수도

내가 Y 및 Z. Y는 X AND V. 및 z의 함수 종속 변수를 생성하기 위해, V를 독립 변수 X를 변화 할 것이다 X, V, Y (X, V), Z (X, Y (X, V))와 같은 종속성을 더 쉽게 볼 수 있습니다.

저는 surf 함수를 사용하여 X, Y, Z를 플롯했습니다. 그러나 V 값을 알고 싶습니다. 현재로서는 확인할 수 없습니다. 여기

는 설명하기 위해 몇 가지 테스트 데이터입니다 : 내가 데이터 커서를 사용하는 경우

X = linspace(1,5,5) 
V = linspace(1,5,5) 
Capture = [] 
for j = 1:length(V) 
Y = X.*V(j) 
Capture = [Capture;Y] 
end 
[X,V] = meshgrid(X,V); 
Z = Capture.*X 
surf(X,Y,Z) 

, 나는 X, Y, Z의 값을 볼 수 있지만, 나는 또한 V. I의 값을 알고 싶습니다

surf(X,Y,Z) 
surf(X,V,Z) 

후 모두 X와 Z의 같은 지점에 가서 데이터 커서를 사용 V의 값을 그래프 : 나는 두 개의 플롯을 만들 경우 때문에 그것을 설정 한 방법이 올바른지 알고, 말 Y는 그 점 (X, Z)에 있어야합니다.

별도의 그래프 두 개를 생성하지 않고도 X, Y, V 및 Z 값을 표시 할 수 있습니까?

감사합니다.

답변

3

색상을 4 차원으로 사용하는 것이 가능합니다 (맛이 좋았는지 여부에 관계없이).

surf(X,Y,Z,V); #% 4th arg (V) is mapped onto the current colormap 

취향에 맞게 change the colormap하실 수 있습니다.

colorbar #% displays a colorbar legend showing the value-color mapping 

편집 : 질문자는 색상이 아닌 표시된 배열의 데이터를 정확하게보고 싶어합니다. 이것은 커스텀 데이터 커서 기능을위한 작업입니다. 아래는 순수 익명 함수를 사용하여 구현 한 것입니다. 함수 파일 내에서이 작업을 수행하는 것이 약간 더 간단합니다.

#% Step 0: create a function to index into an array... 
#% returned by 'get' all in one step 
#% The find(ismember... bit is so it returns an empty matrix... 
#% if the index is out of bounds (if/else statements don't work... 
#% in anonymous functions) 
getel = @(x,i) x(find(ismember(1:numel(x),i))); 

#% Step 1: create a custom data cursor function that takes... 
#% the additional matrix as a parameter 
myfunc = @(obj,event_obj,data) {... 
['X: ' num2str(getel(get(event_obj,'position'),1))],... 
['Y: ' num2str(getel(get(event_obj,'position'),2))],... 
['Z: ' num2str(getel(get(event_obj,'position'),3))],... 
['V: ' num2str(getel(data,get(event_obj,'dataindex')))] }; 

#% Step 2: get a handle to the datacursormode object for the figure 
dcm_obj = datacursormode(gcf); 

#% Step 3: enable the object 
set(dcm_obj,'enable','on') 

#% Step 4: set the custom function as the updatefcn, and give it the extra... 
#% data to be displayed 
set(dcm_obj,'UpdateFcn',{myfunc,V}) 

이제 툴팁에 추가 데이터가 표시되어야합니다. 플롯에서 데이터를 변경하는 경우 새 데이터를 함수에 전달하려면 Step 4을 반복해야합니다.

+0

답장을 보내 주신 tmpearce에게 감사드립니다.이 솔루션에 대해 알고 있었지만 문제는 정확한 데이터를 제공하지 않으며 컬러 바가 아니라 그 시점에서 V의 정확한 요소를 갖게된다는 것입니다. 이것이 가능한가? – Tim

+0

아, 알겠습니다. 맞춤 datatips에 대한 정보로 답변을 업데이트했습니다. – tmpearce

+0

tmpearce, 답장을 보내 주셔서 감사합니다.이 코드는 완벽하게 작동합니다. 잘 이해하고 있는지는 잘 모르겠지만 추가 기능이 없으면 데이터 커서 코드를 이해하는 것이 가장 좋습니다. 다시 한 번 감사드립니다! – Tim