我有两个100x100矩阵
u[0] and u[1]
我将两个数组的值设置在0和1之间,以使用matplotlib函数pcolormesh
生成热图。
我可以使用以下方法获得一张热图:
fig1=plt.pcolormesh(u[0], cmap=plt.cm.jet)
但是我希望能够将我的两张热图放在同一个图上,这样我就可以一起查看它们。为此,我为两个数组定义了一个全局位置,描述了数组的质心,
cm[0] and cm[1]
如何将数组的这个相对全局位置实现到一个图形上并相对于彼此绘制我的数组?
例如,如果
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
没有接受那么多论点。
答案 0 :(得分:2)
你走在正确的轨道上,你只需要更仔细地看一下the manual for pcolormesh
。您可以指定pcolormesh
:
pcolormesh(X, Y, C)
本手册还提示您可以将一维数组添加为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
数组的某些缩放。上面代码的结果: