web-dev-qa-db-ja.com

MATLAB:4Dプロット(3D +色/色)を作成する必要があります

色が4番目の変数を表す3Dサーフェスを作成する必要があります。 「サーフィン」は私が必要としているものと似ていることは知っていますが、それだけではありません。基本的に、私は次の変数を持っています:

t = [1:m]

y = [1:n]

a = [1:o]

これらは、3つのデカルト座標軸である必要があります。

また、次元がm x n x oで、基本的に振幅である変数Sがあります。これは、前の3つの変数の関数です(つまり、S = f(t、y、a))。これを色で表現してほしい。

要約すると、(t、y、a、S)の形式のグラフが必要です。ここで、最初の3つの変数はサイズが等しくないベクトルであり、最後の変数は最初の3つによって次元が決定される多次元配列です。

前もって感謝します。

7
Mike

SCATTER3では、xyz、およびその他のグループ化引数を、単一シリーズの場合は同じサイズのNx1ベクトル、Mシリーズの場合はNxM行列にする必要があります。

フルスペースの3Dデータがあります。同じサイズの座標ベクトルを作成するには、 [〜#〜] meshgrid [〜#〜] (または [〜#〜] ndgrid [〜#〜] )関数を使用します。

_[X, Y, Z] = meshgrid(t, y, a);
_

次に、SCATTER3を使用できます。

_scatter3( X(:), Y(:), Z(:), [], S(:) )
_

問題は、それが全空間データであるためです。scatter3は、ポイントが多い場合は特に役に立ちません。

おそらくS変数(_idx = S > 0_など)をフィルター処理してから、フィルター処理されたデータをプロットできます。

本当にすべてのデータを視覚化する必要がある場合は、MATLABドキュメントの ボリュームの視覚化 を参照してください。たとえば、 [〜#〜]スライス[〜#〜] 関数をお勧めします。

[〜#〜]編集[〜#〜]

これは、S = Rand([m,n,o]); scatter3( X(:), Y(:), Z(:), [], S(:), 'filled' )を使用した小さなベクトル(mnoが5に等しい)の完全な3D空間散布図の例です。

scatter example

編集2

あなたのコメントから他の答えまで、私はあなたが32x76050x4のマトリックスを持っていることを発見しました。実際には、2Dスライスを一度に1つずつプロットできます。 IMAGESC機能を使用して2Dで、またはSLICE機能を使用して3Dで実行できます。

試してみてください:

_imagesc(S(:,:,k))
_

ここで、kは、3次元の1から4までの数値です。

または試してみてください

_slice(S, [], [], 1:size(S,3))
shading flat
_

slice example

10
yuk

多分 このユーザー作成のプロットルーチン が役立つでしょう。

 Screnshot from the linked page

3
AllanLRH

私は常に、3D空間のピクセルの色付け/サイズ設定にscatter3を使用してきました。署名は次のとおりです。

scatter3(x,y,z, size, color)

サイズと色は、座標に等しい長さのスカラーまたはベクトルにすることができます。私は通常、表示している内容に応じて、4番目の属性を反映するために色またはサイズのいずれかを使用します。このマシンにはMatlabがないので、メモリの使用法が完全に正確でない場合はご容赦ください。 「helpscatter3」はそれをはるかによく説明するはずです。

1
rutgersmike