4

Python Pylab または matplotlib を使用して3Dカーペット プロットを描画したいと考えています。カーペット プロットの意味を説明します。

X、Y メッシュグリッド上にポイントがあります。このポイントには標高が関連付けられていますが、有限セットからの整数も関連付けられています。共通の 3D プロットにより、レリーフを視覚化できます。標高は Z に沿っており、Z 軸に沿った座標 X、Y によって決定されるポイントの標高を視覚化できます。または、標高のヒートマップを描画します。これは 2D プロットであり、X、Y によって決定される各ピクセルには、高度の関数である色があり、頂点は赤、底は青です。これらのデータに対していくつかのクラスタリングを行います。クラスタリングの後、各ピクセルについて、標高とラベル (整数) の 2 つの情報が得られます。各ピクセルにラベルを付けて 2D マップを描画すると、クラスタリングの結果が得られます。

ここで、両方の情報を同じ 3D グラフにプロットしたいと思います。Z 座標は標高である必要があり、サーフェス上のポイントはその「クラスター カラー」で色付けする必要があります。これは、私が 3D カーペット プロットと呼んでいるものです (用語が正しく聞こえない場合は、教えてください)。

4

1 に答える 1

3

「クラスターの色」は、グリッドの X、Y、Z 値に関する一連の条件です。これらを (値の) マスクにすることができれば、True/Falseそれらに色をマッピングするのは簡単です。ニーズに合わせて調整できる任意の条件セットの例を示しました。コードはhttp://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.htmlから改作されました:

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

# Some sample data
x_side = np.arange(-5, 5, 0.04)
y_side = np.arange(-5, 5, 0.04)
X, Y = np.meshgrid(x_side,y_side)

# Fake mountains
Z = np.exp(-(X**2+Y**2)) + 2*np.exp(-((X-2)**2+Y**2)) 

# Assign colors based off some user-defined condition
COLORS = np.empty(X.shape, dtype=str)
COLORS[:,:] = 'b'
COLORS[(Z>.1) * (Z<.3)] = 'r'
COLORS[Z>.3] = 'g'
COLORS[X+Y < -1] = 'k'

# 3D surface plot
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, facecolors=COLORS, rstride=1, cstride=1,
        linewidth=0)
plt.show()

ここに画像の説明を入力

于 2012-08-28T14:12:59.230 に答える