Python - 使用 pyplot 将二维数组映射到网格?

Jai*_*man 3 python mapping grid colors matplotlib

我是 pyplot 的新手,无法找到将数组映射到彩色网格的合适解决方案。例如,如果我有一个 10x10 二维数组和 10x10 网格:

[[0,0,0,0,0,1,1,1,1,0],
[0,0,0,0,0,1,0,0,1,0],
[0,0,1,0,1,0,1,1,0,0],
[0,0,1,0,0,1,1,0,1,0],
[0,0,1,0,1,0,0,1,1,0],
[1,0,0,1,0,1,0,0,1,0],
[0,1,0,0,0,1,1,1,1,1],
[0,1,0,0,0,0,1,1,1,1],
[1,0,0,0,1,1,1,0,1,0],
[1,1,1,1,0,0,0,1,1,0]]
Run Code Online (Sandbox Code Playgroud)

如果 0 和 1 分别是蓝色和红色,则网格应如下所示:

彩色网格(我没有生成这个图像)

我怎样才能用 pyplot 做到这一点?

Wil*_*sem 5

是的,您可以为此使用imshow[matplotlib-doc]

data = [
    [0,0,0,0,0,1,1,1,1,0],
    [0,0,0,0,0,1,0,0,1,0],
    [0,0,1,0,1,0,1,1,0,0],
    [0,0,1,0,0,1,1,0,1,0],
    [0,0,1,0,1,0,0,1,1,0],
    [1,0,0,1,0,1,0,0,1,0],
    [0,1,0,0,0,1,1,1,1,1],
    [0,1,0,0,0,0,1,1,1,1],
    [1,0,0,0,1,1,1,0,1,0],
    [1,1,1,1,0,0,0,1,1,0]
]

import matplotlib.pyplot as plt

plt.imshow(data)
plt.show()
Run Code Online (Sandbox Code Playgroud)

因此,您只需将 2d-list 传递给imshow(),这将生成以下图像:

imshow 的结果

正如文件中规定,你可以用另一种颜色映射到使用其他颜色01,例如:

plt.imshow(data, cmap=plt.cm.bwr)
Run Code Online (Sandbox Code Playgroud)

将产生相同的数据,但具有蓝白红颜色图:

imshow blue-red 的结果


San*_*apa 5

您需要的适当功能是pcolor

from matplotlib import pyplot as plt
from matplotlib import colors
cmap = colors.ListedColormap(['Blue','red'])
plt.figure(figsize=(6,6))
plt.pcolor(data[::-1],cmap=cmap,edgecolors='k', linewidths=3)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

或者:

cmap = colors.ListedColormap(['Blue','red'])
plt.figure(figsize=(6,6))
plt.pcolor(data[::-1],cmap=cmap,edgecolors='k', linewidths=3)
plt.xticks(np.arange(0.5,10.5,step=1))
plt.yticks(np.arange(0.5,10.5,step=1))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明