【发布时间】:2014-03-09 20:10:48
【问题描述】:
我正在尝试在 Matplotlib 中使用 imshow 或 matshow 创建一个 10x10 网格。下面的函数将一个 numpy 数组作为输入,并绘制网格。但是,我希望数组中的值也显示在网格定义的单元格内。到目前为止,我找不到合适的方法来做到这一点。我可以使用plt.text 将东西放在网格上,但这需要每个单元格的坐标,完全不方便。有没有更好的方法来完成我想要完成的工作?
谢谢!
注意:下面的代码还没有从数组中获取值,我只是在玩plt.text。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
board = np.zeros((10, 10))
def visBoard(board):
cmap = colors.ListedColormap(['white', 'red'])
bounds=[0,0.5,1]
norm = colors.BoundaryNorm(bounds, cmap.N)
plt.figure(figsize=(4,4))
plt.matshow(board, cmap=cmap, norm=norm, interpolation='none', vmin=0, vmax=1)
plt.xticks(np.arange(0.5,10.5), [])
plt.yticks(np.arange(0.5,10.5), [])
plt.text(-0.1, 0.2, 'x')
plt.text(0.9, 0.2, 'o')
plt.text(1.9, 0.2, 'x')
plt.grid()
visBoard(board)
输出:
【问题讨论】:
-
使用 annotate 让您可以非常灵活地指定文本的坐标。
-
我想知道是否有办法在不指定坐标的情况下做到这一点。到目前为止,我是手动完成的(可能不是最聪明的想法)假设图形大小可能会改变,我将不得不想出一个计算正确坐标的函数。
标签: python numpy matplotlib visualization