matplotlibのmpl_toolkits.mplot3d plot_surface関数を使用して3Dサーフェスをプロットしようとしています。 私の変数Z(関数f(x、y))はかなり複雑で、一度メッシュ化すればXとYの関数として書くことができないので、xを通るループを使って2次元配列として計算します私はこの配列Zをplot_surface関数の呼び出しに渡していますが、基本的にはZの図形を期待していますが、Zに対応する図形を得るため、基本的には間違った図形が得られます。転置。matplotlibが3Dプロット内の行列の転置をプロットするのはなぜですか?
私は下に私の問題を再現はるかに簡単な例を行うことができました:だから
X = range(5)
Y = range(5)
X,Y = np.meshgrid(X,Y)
mysol = np.array([[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]])
fig1 = plt.figure(1)
ax = fig1.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, mysol, rstride=1, cstride=1, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
を、私は、x = 0のとき、私はmysol [0を得るように、これはプレーンを生成することを期待してい,: ] = [1,1,1,1,1](私の行列mysolの最初の行)。代わりに、このコードによって生成されたグラフを見ると、x = 0のとき、行列の最初の列が得られます(mysol [:、0] = [1,2,3,4,5])。
私はmysol.transpose()をmysolとは反対にプロットすると問題が解決されることを理解していますが、ここでロジックを理解しようとしています。 。いない列方向どこに私のミスで事前に
おかげで、あなたのmeshgrid
の結果で
あなたのイメージはプロットのデータに対応していません。彼のプロットでは、赤い行はY = 4にありますが、イメージでは赤の行はY = 0にあります。 – BrenBarn
@BrenBarn私の画像は 'coolwarm'(' RdBu'は赤で始まり、 'coolwarm'は青で始まります)を使っている間に' RdBu'カラーマップを使います。しかし、この問題の全体的な点は、質問の画像を再現するのではなく、画像とその基礎となる配列がどのように関連しているかを示すことです。つまり、 'y'は行、' x'は列です。これを見るために、カラーマップは無関係です。 – ImportanceOfBeingErnest