Изображение графика Pyplot с цветовой картой и последовательностью альфа

1

С помощью функции 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


Я собираюсь что-то вроде этого: Изображение 174551 где вертикальная часть цветовой шкалы показывает значение в B[0] а горизонтальная часть цветовой шкалы показывает значение в B[1].

Теги:
matplotlib
colors

1 ответ

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, который используется для создания цветовой панели, на другой, который выглядит так, как вы хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню