在python中的一个图中叠加热图

时间:2016-02-02 20:04:34

标签: python arrays matplotlib

我有两个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] 

然后记住的情节将是这样的:

example plot

我以为我可以用这个:

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

plt.pcolormesh没有接受那么多论点。

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上,你只需要更仔细地看一下the manual for pcolormesh。您可以指定pcolormesh

的平面内坐标
pcolormesh(X, Y, C)

本手册还提示您可以将一维数组添加为XY,这样您就不必使用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)

由于我们从数据数组的索引构造了XY数据,因此每个“热图”的大小远小于您的示例图,但这可以通过以下方法解决: XY数组的某些缩放。上面代码的结果:

result