1

matplotlib でサーフェス プロットを作成しています。私の軸は x、y、および深さです。RGB 値を持つ 2 次元配列があり、インデックスは (x,y) 座標に対応します。この 2D 配列からカラーマップを作成するにはどうすればよいですか? ありがとう。

numpy 配列を作成するコード:

import Image
import numpy as np
def makeImageArray(filename):
    img = Image.open(filename)
    a = np.array(img).astype("float32")
    return a

画像はグレースケールです。

4

1 に答える 1

0

すべてのポイント (x,y) について収集したものから、高さと色の 2 つの情報が得られます。高さを使用して表面プロットを作成し、各位置の色に従って色付けします。

カスタムカラーマップを簡単に指定できますが、これが役立つとは思いません。あなたが考えているのは、(x、y)の高さを色にマッピングするカラーマップと同じではありません。

結果は、こちらの表面プロットの例で最も明白です

あなたが望むことはmatplotlibの範囲を超えており、あなたが使用したいとは思わないある種のハックでしか実行できないと思います。

それでもここに私の提案があります:

import pylab as py
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

X = np.arange(-5, 5, 0.1)
Y = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

colorise = [((5.0 + X[i][i])/10.0, 0.5, 0.0) for i in xrange((len(X)))] 

ax = py.subplot(111, projection='3d')
for i in xrange(len(X)):
    ax.plot(X[i], Y[i], Z[i], "o", color=colorise[i])

py.show()

これにより、以下が生成されます。 例

重要なことに、これは高さに依存しない色で 3D サーフェスを表示しました (これは方向のグラデーションです)。最も明白な問題は、個々のポイントを色付けすると matplotlibs サーフェスが失われ、3D プロットが射影と呼ばれる理由が痛々しいほど明確になることです。

申し訳ありませんが、これはあまり役に立ちません。うまくいけば、より良いソフトウェアが存在するか、matplotlibs の完全な機能を知りません。

于 2013-06-27T19:39:04.707 に答える