電磁散乱過程の遠方界のプロットをいくつか作成したいと思います。
これを行うために、値θ、φ、およびrを計算しました。座標θとφは単位球上に規則的なグリッドを作成するので、デカルト座標に変換して使用できますplot_Surface
(ここにあります)。
私の問題は、デフォルトのように見える高さzではなく、半径rを基準にしてサーフェスに色を付ける方法が必要なことです。
この依存関係を変更する方法はありますか?
電磁散乱過程の遠方界のプロットをいくつか作成したいと思います。
これを行うために、値θ、φ、およびrを計算しました。座標θとφは単位球上に規則的なグリッドを作成するので、デカルト座標に変換して使用できますplot_Surface
(ここにあります)。
私の問題は、デフォルトのように見える高さzではなく、半径rを基準にしてサーフェスに色を付ける方法が必要なことです。
この依存関係を変更する方法はありますか?
どうやって乗っているのかわからないので、解決したかもしれません。しかし、ポールのコメントからのリンクに基づいて、あなたはこのようなことをすることができます。plot_surfaceのfacecolor引数を使用して、必要な色の値を渡します。
(matplotlibドキュメントからsurface3dデモを変更しました)
編集:ステファンが彼のコメントで述べたように、私の答えは次のように簡略化することができます:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
xlen = len(X)
Y = np.arange(-5, 5, 0.25)
ylen = len(Y)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
maxR = np.amax(R)
Z = np.sin(R)
# Note that the R values must still be normalized.
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=cm.jet(R/maxR),
linewidth=0)
plt.show()
そして(終わり)私の不必要に複雑な元のバージョンは、matplotlib.cmのインポートを省略していますが、上記と同じコードを使用していますが、
# We will store (R, G, B, alpha)
colorshape = R.shape + (4,)
colors = np.empty( colorshape )
for y in range(ylen):
for x in range(xlen):
# Normalize the radial value.
# 'jet' could be any of the built-in colormaps (or your own).
colors[x, y] = plt.cm.jet(R[x, y] / maxR )
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,
linewidth=0)
plt.show()