Как построить изображение из матрицы подключения?
Я хочу написать скрипт для создания изображения из матрицы подключения. По сути, везде, где есть "1" в матрице, я хочу, чтобы эта область была затенена на изображении. Например, -
Я создал это изображение с помощью Photoshop. Но у меня есть большой набор данных, поэтому мне придется автоматизировать процесс. Было бы очень полезно, если бы кто-нибудь мог указать мне правильное направление.
РЕДАКТИРОВАТЬ
Вот изображение, которое я получаю после использования скрипта. Это связано с тем, что матрица большая (19 х 19). Можно ли как-то улучшить видимость этого изображения, чтобы черно-белые рамки выглядели более четкими?
3 ответа
Я бы предложил использовать 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)))
перед написанием изображения
Может быть, вы можете попробовать это!
import matplotlib.cm as cm
# Display matrix
plt.imshow(np.random.choice([0, 1], size=100).reshape((10, 10)),cmap=cm.binary)
С тепловой картой 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.