使用matplotlib的热图

Don*_*beo 1 python matplotlib heatmap

我有一个以这种方式生成的数据集:

 aa = linspace(A - 5, A + 5, n_points)
 bb = linspace(B - 1.5, B + 1.5, n_points)
 z = []
 for a in aa:
     for b in bb:
         z.append(cost([a, b]))
Run Code Online (Sandbox Code Playgroud)

我想和头部地图在哪里z定义点(a,b)中的颜色.我需要这个来分析局部最小值.

我正在使用matplotlib,但我不确切知道如何继续.

Joe*_*ton 5

通常你会使用imshowpcolormesh为此.

例如:

import numpy as np
import matplotlib.pyplot as plt

n_points = 10
aa = np.linspace(-5, 5, n_points)
bb = np.linspace(-1.5, 1.5, n_points)

def cost(a, b):
    return a + b

z = []
for a in aa:
    for b in bb:
        z.append(cost(a, b))

z = np.reshape(z, [len(aa), len(bb)])

fig, ax = plt.subplots()
im = ax.pcolormesh(aa, bb, z)
fig.colorbar(im)

ax.axis('tight')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,最好将示例代码编写为:

import numpy as np
import matplotlib.pyplot as plt

n_points = 10
a = np.linspace(-5, 5, n_points)
b = np.linspace(-1.5, 1.5, n_points)
a, b = np.meshgrid(b, a)

z = a + b # Vectorize your cost function

fig, ax = plt.subplots()
im = ax.pcolormesh(a, b, z)
fig.colorbar(im)

ax.axis('tight')
plt.show()
Run Code Online (Sandbox Code Playgroud)

或者,更紧凑:

import numpy as np
import matplotlib.pyplot as plt

npoints = 10
b, a = np.mgrid[-5:5:npoints*1j, -1.5:1.5:npoints*1j]

z = a + b

fig, ax = plt.subplots()
im = ax.pcolormesh(a, b, z)
fig.colorbar(im)

ax.axis('tight')
plt.show()
Run Code Online (Sandbox Code Playgroud)