如何从连接矩阵绘制图像?

时间:2018-12-19 06:33:21

标签: python matrix adjacency-matrix

我想编写一个脚本来根据连接矩阵创建图像。基本上,只要矩阵中有一个“ 1”,我都希望该区域在图像中被阴影化。例如-

enter image description here

我使用Photoshop创建了这张图片。但是我有一个很大的数据集,所以我将不得不自动化该过程。如果有人能指出正确的方向,那将真的很有帮助。

编辑

使用脚本后得到的图像是这个。这是因为矩阵很大(19 x 19)。有什么办法可以提高这张图片的可见度,使黑白框显得更清晰?

enter image description here

3 个答案:

答案 0 :(得分:3)

在这种情况下,我建议结合使用opencvnumpy。 创建numpy.array的二维dtype='uint8',其中黑色的0和白色的255。例如,要获得2x2数组,其左上方为白色,右下方为白色,左下方为黑色,右上方为黑色,则可以使用以下代码:

myarray = numpy.array([[255,0],[0,255]],dtype='uint8')

然后您可以使用opencv2将该数组另存为图像:

cv2.imwrite('image.bmp',myarray)

其中数组的每个单元格都由单个像素表示,但是,如果要放大(例如,每个单元格由5x5正方形表示),则可以使用numpy.kron函数,并使用以下一行: / p>

myarray = numpy.kron(myarray, numpy.ones((5,5)))

写图像之前

答案 1 :(得分:3)

也许您可以尝试一下!

import matplotlib.cm as cm 
# Display matrix
plt.imshow(np.random.choice([0, 1], size=100).reshape((10, 10)),cmap=cm.binary)

enter image description here

答案 2 :(得分:2)

带有Seaborn热图:

import seaborn as sns
np.random.seed(3)
sns.set()
data = np.random.choice([0, 1], size=(16,16), p=[3./4, 1./4])
ax = sns.heatmap(data, square=True, xticklabels=False, yticklabels=False, cbar=False, linewidths=.8, linecolor='lightgray', cmap='gray_r')

enter image description here

请注意,反向色图gray_r的黑色代表1,白色代表0。