4D绘图显示变量与数据光标Matlab

时间:2012-05-25 02:47:35

标签: matlab graph 4d

我无法弄清楚如何在我的情节中显示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的值而不必生成两个单独的图形?

谢谢!

1 个答案:

答案 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以将新数据传递到函数中。