2

大量の (加重) 方向を含むデータセットがあります。特定の方向に向きのクラスターがあるかどうかをテスト/視覚化するための優れた表現を作成したいと考えています。

まず、3 つの 2D 極座標プロットを作成しました。1 つの次元を捨てて、残りの 2 つの次元で方向がどの方向に向けられているかを示す「風配図」をプロットしました。これは非常にうまく機能しているようです。これらのサーフェスのうちの 2 つに、方向の 1 つまたは 2 つのクラスターがあります。ただし、データは 3D であり、これらすべての 3 次元で方向のクラスターがどこを指しているかを確認したいと考えています。

ただし、3D では、問題はさらに難しくなります。私の最初の推測は、2 つの面 (傾斜角と方位角) の 2 つの角度を組み合わせて「2 次元」の極座標プロットを作成し、これを画像として表示することでした。ただし、現在、一部のビンは、他のビンよりもはるかに広い方向球上の表面領域を表しています (これは極特異点と呼ばれていると思います)。

Matlab でこの問題に関するこの古いスレッドを見つけました: http://www.mathworks.nl/matlabcentral/newsreader/view_thread/236925、しかし、実際には簡単な解決策はありません: まず第一に、私はむしろ仕事をしたくありません第二に、私はこのツールボックスのライセンスを持っていません。第三に、何が機能するかを知っているコードを持っています。

代替ソリューションや Python/Num-/Scipy でこれを行う方法についてのアイデアはありますか? 同様のサイズのビンの球体に 2D グリッドを配置する良い方法はありますか?

4

1 に答える 1

0

これは、「同様のサイズのビンの球体に2Dグリッドを配置する」ための解決策ではありません.

方向データ(3Dベクトルのリスト)を取得して正規化できる場合、これでうまくいくかもしれません:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

orientation = np.random.random((3,50))
weight = np.random.randint(100, size=50)

ax.scatter(orientation[0], orientation[1], zs= orientation[2], s=weight)
plt.show()

正規化された方向ベクトルを表す点と、各方向に関連付けられた重みのサイズをプロットします。

あるいは、より複雑ですが、最初のアイデアに沿って、matplotlib 3D プロット チュートリアルからのこのスニペットがあります。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)

x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z,  rstride=4, cstride=4, color='b')

plt.show()

必要なのは、プロットの各サブディビジョンに存在する方向の加重密度を表す配列であるカラー マップを計算し、それをカラー kwarg として渡すことだけです。(明日調べますが、それで始められるはずです)

于 2012-12-06T03:17:10.013 に答える