/ / pythonの1つのプロットにヒートマップを重ね合わせる - python、配列、matplotlib

Pythonの1つのプロットにヒートマップをスーパーインポーズする - Python、配列、matplotlib

100×100の行列が2つあります

u[0] and u[1]

matplotlib関数を使ってヒートマップを作成するために、0から1までの2つの配列の値を設定しました。 pcolormesh.

次のものを使って1つのヒートマップを得ることができます。

 fig1=plt.pcolormesh(u[0], cmap=plt.cm.jet)

私は自分の2つのヒートマップを置くことができるようにしたい同じ数字なので一緒に見ることができます。これを行うために、2つの配列のグローバル位置を定義します。これは配列の重心を表します

cm[0] and cm[1]

配列のこの相対的なグローバル位置を1つのFigureに実装して、互いに対して自分の配列をプロットする方法を教えてください。

例えば、

u[0]=np.array(([0,1,0],[1,1,1],[0,1,0])) is at cm=[10,20]
u[1]=np.array(([0,1,0],[1,1,1],[0,1,0])) is at cm=[40,40]

その場合、プロットは次のようになります。

サンプルプロット

私はこれを使うことができると思いました:

 plt.pcolormesh(u[0], cm[0], cmap=plt.cm.jet)
plt.pcolormesh(u[1], cm[1], cmap=plt.cm.jet)

しかし plt.pcolormesh その多くの引数を取りません。

回答:

回答№1は2

あなたは正しい軌道に乗っています、あなたはただ見なければなりません のマニュアル pcolormesh もう少し慎重に。君は できる の面内座標を指定する pcolormesh

pcolormesh(X, Y, C)

このマニュアルでは、1次元配列を次のように追加できることも示唆されています。 X そして Yだから、あなたは台無しにする必要はありません numpy.meshgrid.

だからあなたはこのようなことをするべきです:

import matplotlib.pyplot as plt
import numpy as np

us = [np.array(([0,1,0],[1,1,1],[0,1,0])), np.array(([0,1,0],[1,1,1],[0,1,0]))]
centers = [[10,20],[40,40]]

plt.figure()
for cm,u in zip(centers,us):
n,m = u.shape
X = np.arange(n+1)
Y = np.arange(m+1)
# center and shift coordinates
X = X - n/2.0 + cm[0]
Y = Y - m/2.0 + cm[1]
plt.pcolormesh(X,Y,u)

私達が造ったので X そして Y データ配列のインデックスからのデータ、各 "ヒートマップ"のサイズはあなたの例の図よりもずっと小さいですが、これはいくつかのスケーリングで自明に修正することができます。 X, Y 配列上記のコードの結果:

結果