1

プロットに 4 つの変数を表示する方法がわかりません。

従属変数 Y と Z を生成するために、独立変数 X、V を変化させたいと考えています。Y は X AND V の関数です。Z は Y AND 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 の値も知りたいです。2 つのプロットを作成すると、 :

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

次に、データ カーソルを使用して、両方のグラフの X と Z の同じ点に移動します。V と Y の値は、その点 (X,Z) の値になります。

2 つの個別のグラフを生成することなく、X、Y、V、および Z の値を表示する方法はありますか?

ありがとう!

4

1 に答える 1

3

色を 4 次元として使用することも可能です (それが自分に似合うかどうかは好みの問題です)。

surf(X,Y,Z,V); #% 4th arg (V) is mapped onto the current 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、新しいデータを関数に渡すために繰り返す必要があることに注意してください。

于 2012-05-25T03:29:49.553 に答える