Py学习  »  Python

python-使用pyplot将2d数组映射到网格?[副本]

Jai Bheeman • 6 年前 • 2641 次点击  

这个问题已经有了答案:

我对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]]

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

colored grid (I didn't generate this image)

我怎么能用Pyplot呢?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39650
文章 [ 2 ]  |  最新文章 6 年前
Willem Van Onsem
Reply   •   1 楼
Willem Van Onsem    7 年前

是的,你可以用 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()

所以你只要把二维列表传给 imshow() ,这将生成以下图像:

result of imshow

如文档中所指定,您可以使用另一个颜色映射来使用其他颜色 0 1 ,例如:

plt.imshow(data, cmap=plt.cm.bwr)

将生成相同的数据,但使用蓝-白-红颜色映射:

result of imshow blue-red

Sandeep Kadapa
Reply   •   2 楼
Sandeep Kadapa    7 年前

您需要的适当功能是 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()

enter image description here

或:

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()

enter image description here