Python - 如何使用pyplot将2D数组映射到网格中?

5

我是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实现呢?
2个回答

8
你需要的适当函数是 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()

这里输入图片描述

或者:

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


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

你只需将2d列表传递给imshow(),就会生成以下图像:

result of imshow

根据文档中指定的要求,你可以使用另一个颜色映射来使用其他颜色代替01,例如:

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

将产生相同的数据,但使用蓝白红色地图:

imshow蓝红结果


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接