ポイントのカラーグラデーションを使用して3Dプロットを作成するにはどうすればよいですか? 2D散布図で機能する以下の例を参照してください。
編集(thanks to Chris):3Dプロットから私が期待しているのは、2D散布図のように、赤から緑の範囲の点の色のグラデーションです。 3D散布図に表示されるのは赤い点だけです。
解決策:いくつかの理由で(他の場所にコピーしたグラデーションの例に関連して)、xrangeをlen-1に設定し、3Dプロットのすべてを混乱させます。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Create Map
cm = plt.get_cmap("RdYlGn")
x = np.random.Rand(30)
y = np.random.Rand(30)
z = np.random.Rand(30)
#col = [cm(float(i)/(29)) for i in xrange(29)] # BAD!!!
col = [cm(float(i)/(30)) for i in xrange(30)]
# 2D Plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, s=10, c=col, marker='o')
# 3D Plot
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
ax3D.scatter(x, y, z, s=10, c=col, marker='o')
plt.show()
以下は、グラデーションカラーを使用した3D散布の例です。
import matplotlib.cm as cmx
from mpl_toolkits.mplot3d import Axes3D
def scatter3d(x,y,z, cs, colorsMap='jet'):
cm = plt.get_cmap(colorsMap)
cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs))
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z, c=scalarMap.to_rgba(cs))
scalarMap.set_array(cs)
fig.colorbar(scalarMap)
plt.show()
もちろん、0や1など、さまざまな値の範囲でスケールを選択できます。
次の作品:なぜあなたがそうしないのか理解できません。 RGBAフロートのシーケンス、またはフロートのシーケンスとして色を設定できるはずです。
# Create Map
cm = plt.get_cmap("RdYlGn")
x = np.random.Rand(30)
y = np.random.Rand(30)
z = np.random.Rand(30)
col = np.arange(30)
# 2D Plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, s=10, c=col, marker='o')
# 3D Plot
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
p3d = ax3D.scatter(x, y, z, s=30, c=col, marker='o')
plt.show()
しかし、スキャッターの助けとして、私は次のように思います。
A :class:`matplotlib.colors.Colormap` instance or registered
name. If *None*, defaults to rc ``image.cmap``. *cmap* is
only used if *c* is an array of floats.