我无法弄清楚如何在我的情节中显示4个变量。
我想改变自变量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的值,但我也想知道V的值。我知道我设置的方式是正确的,因为如果我做了两个情节,说:
surf(X,Y,Z)
surf(X,V,Z)
然后使用数据光标在两个图形的X和Z的相同点上,V和Y的值是它们应该为该点(X,Z)的值。
无论如何都要显示X,Y,V和Z的值而不必生成两个单独的图形?
谢谢!
答案 0 :(得分:3)
使用颜色作为第四维度是一种可能性(对你而言,它是否适合你的品味)。
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
以将新数据传递到函数中。