3

我有一组坐标,说[(2,3),(45,4),(3,65)] 我需要将它们绘制为矩阵无论如何我可以在 matplotlib 中执行此操作,所以我希望它具有这种外观http://imgur.com/Q6LLhmk

4

1 回答 1

3

编辑:我原来的答案使用ax.scatter. 这样做有一个问题:如果两个点并排,ax.scatter可能会在它们之间画出一点空间,具体取决于比例:

例如,与

data = np.array([(2,3),(3,3)])

这是放大的细节:

在此处输入图像描述

因此,这是解决此问题的替代解决方案:

import matplotlib.pyplot as plt
import numpy as np

data = np.array([(2,3),(3,3),(45,4),(3,65)])
N = data.max() + 5

# color the background white (1 is white)
arr = np.ones((N,N), dtype = 'bool')
# color the dots black (0)
arr[data[:,1], data[:,0]] = 0

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

ax.imshow(arr, interpolation='nearest', cmap = 'gray')
ax.invert_yaxis()
# ax.axis('off')
plt.show()

在此处输入图像描述

无论您放大多少,(2,3) 和 (3,3) 处的相邻方块都将保持并排。

不幸的是,与 using 不同ax.scatter, usingax.imshow需要构建一个N x N数组,因此它可能比 using 更占用内存ax.scatterdata但是,除非包含非常大的数字,否则这应该不是问题。

于 2013-02-13T12:51:09.717 回答