Как отобразить два изображения поверх другого с помощью matplotlib? - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть тепловая карта с некоторыми значениями (model_prediction_i). Поскольку позже я хочу повернуть эту тепловую карту перед ее построением, я должен сохранить ее с plt.imsave. Моя цель состоит в том, чтобы отобразить reference.jpg в качестве фона графика, нанести на него X_test_i, а затем расположить тепловую карту также на этом графике, чтобы я мог видеть фон, нанесенную линию и тепловую карту, которая hs меньших размеров, чем фоновое изображение -> он будет перекрывать только часть фонового изображения. Как reference.jpg: enter image description here Возможно ли это?

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

model_prediction_i = np.zeros((200,200))
model_prediction_i[160][160] = 1
model_prediction_i[160][161] = 1
model_prediction_i[160][162] = 1
model_prediction_i[160][163] = 1
model_prediction_i[160][164] = 1
model_prediction_i[160][165] = 1
model_prediction_i[160][166] = 1
model_prediction_i[160][167] = 1
model_prediction_i[160][168] = 1
model_prediction_i[160][169] = 1
model_prediction_i[160][170] = 1
model_prediction_i[160][171] = 1

plt.imsave('outfile.jpg', model_prediction_i, cmap='hot')
rotated_img = Image.open('outfile.jpg')
background = Image.open('reference.jpg')


X_test_i = np.zeros((5, 2))
X_test_i[0] = [10 ,10]
X_test_i[1] = [60 ,60]
X_test_i[2] = [90 ,90]
X_test_i[3] = [140 ,140]
X_test_i[4] = [250 ,230]

fig, ax = plt.subplots(figsize=(10, 10))
ax.plot(X_test_i[:, 0], X_test_i[:, 1], marker='o', markersize=7, color="red", label='Current position', antialiased=True)


ax.imshow(rotated_img, cmap='hot', extent=[X_test_i[:, 0][-1]-10, X_test_i[:, 0][-1]+10, X_test_i[:, 1][-1]-10, X_test_i[:, 1][-1]+10])
ax.imshow(background)
plt.show()
...