С помощью функции imshow из pyplot я могу построить изображение размера (M, N), где каждое значение в массиве размера (M, N) связано с цветом из цветовой карты.
import numpy as np
import matplotlib.pyplot as plt
A = np.random.rand(5,5)
plt.imshow(A, cmap='jet')
plt.colorbar()
plt.show()
У меня есть (2, M, N) размерный массив (пусть назовем его B
), который я хотел бы показать. B[0]
дает оттенок, а B[1]
- альфа. Здесь B[0]
будет таким же, как A
в первом примере.
Я хотел бы написать что-то вроде plt.imshow(B[0], cmap='jet', alpha=B[1])
. Но значение alpha
должно быть одинаковым для всего изображения, так как опция alpha
должна быть скалярной или нет
С помощью imshow
я также могу указать массив (M, N, 3) или (M, N, 4), где даны значения для R, G, B и альфа. Однако я не знаю, как получить значения RGB из моего начального (M, N) массива A
Я попытался установить цвет со схемой HSV из моих значений, затем преобразовать в RGB и построить с этими цветами
from matplotlib import colors
B = np.random.rand(2,5,5)
hue = B[0]
sat = B[1]
val = np.ones(B[0].shape)
rgb = colors.hsv_to_rgb(np.array([hue, sat, val]).T)
plt.imshow(rgb)
plt.show()
Но тогда я не знаю, как сделать цветную полосу из фактических значений в B
Я собираюсь что-то вроде этого:
где вертикальная часть цветовой шкалы показывает значение в B[0]
а горизонтальная часть цветовой шкалы показывает значение в B[1]
.
Первая часть относительно прямолинейна:
import numpy as np
import matplotlib.pyplot as plt
A = np.random.rand(5,5)
cmap = plt.get_cmap('jet')
rgba_img = cmap(A)
rgba_img[:, :, 3] = np.random.rand(5, 5)
plt.imshow(rgba_img)
plt.colorbar()
plt.show()
Создание цветовой шкалы сложнее. В основном вам нужно будет заменить pcolor, который используется для создания цветовой панели, на другой, который выглядит так, как вы хотите.