2012-05-25 1 views
1

У меня возникли проблемы с выяснением того, как отображаются 4 переменных в моем заговоре.4D отображение переменных отображения с курсором данных Matlab

Хочу отличаться от независимых переменных X, V, чтобы произвести зависимые переменные Y и Z. Y является функцией X и V. И Z является функцией Y и X.

Это может проще видеть зависимости: X, V, Y (X, V), Z (X, Y (X, V)).

Я использовал функцию прибоя для построения 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, но я также хотел бы знать значение В.И. знаю, что так она у меня настроить правильно, потому что если я делаю два участка, скажем:

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