【问题标题】:How to plot an image from a connection matrix?如何从连接矩阵中绘制图像?
【发布时间】:2018-12-19 06:33:20
【问题描述】:
我想编写一个脚本来从连接矩阵创建图像。基本上,只要矩阵中有“1”,我希望该区域在图像中被着色。例如 -
我使用 Photoshop 创建了这张图片。但是我有一个很大的数据集,所以我必须自动化这个过程。如果有人能指出我正确的方向,那将非常有帮助。
编辑
我使用脚本后得到的图像是这样的。这是因为矩阵很大 (19 x 19)。有什么办法可以增加这张图片的可见度,让黑白框看起来更清晰?
【问题讨论】:
标签:
python
matrix
adjacency-matrix
【解决方案1】:
在这种情况下,我建议将opencv 与numpy 结合使用。
创建二维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 函数,如下一行:
myarray = numpy.kron(myarray, numpy.ones((5,5)))
写图片之前
【解决方案2】:
也许你可以试试这个!
import matplotlib.cm as cm
# Display matrix
plt.imshow(np.random.choice([0, 1], size=100).reshape((10, 10)),cmap=cm.binary)
【解决方案3】:
使用 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')
注意反向颜色映射 gray_r 将黑色表示 1,白色表示 0。