Используйте переменную, чтобы установить альфа-непрозрачность в палитре

Я хотел бы построить две выходные переменные, скажем, map1 и map2, как функцию двух входных переменных, скажем, x и y с помощью карт цветов. Для этого я хочу представить map1 с использованием цветовой шкалы, а map2 — с использованием шкалы прозрачности. Тем не менее, опция alpha не может принимать np.array в качестве аргумента, и следующий код обречен на провал.

fig=plt.figure(num=None, figsize=(21,12), dpi=80, facecolor='w', edgecolor='k')
ax1=plt.subplot(211)
im = ax1.pcolor(map1, cmap='Spectral_r', alpha=map2)
fig.colorbar(im)

Кто-нибудь увидит способ сделать это? Я не хочу использовать другую перекрывающуюся цветовую шкалу и действительно хочу, чтобы map2 была представлена ​​с помощью функции прозрачности, чтобы, например, видимость фоновой сетки сообщала читателю амплитуду map2 .


person Ielm    schedule 24.08.2015    source источник


Ответы (1)


Вы можете сделать это с помощью pcolormesh, а затем установить alpha для граней QuadMesh. Например:

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(1)
ax.set_aspect('equal')

# The data array
m1 = np.random.rand(5,5)
# The alpha array. Normalize your map2 to the range 0,1
m2 = np.linspace(0,1,25).reshape(5,5) 

p = ax.pcolormesh(m1)
plt.savefig('myfig.png') # or fig.canvas.draw()

for i,j in zip(p.get_facecolors(),m2.flatten()):
    i[3] = j # Set the alpha value of the RGBA tuple using m2

plt.savefig('myfig.png')

Примечание: кажется, вам нужно сохранить фигуру (или plt.show() или fig.canvas.draw()) после команды pcolormesh, чтобы сгенерировать массив p.get_facecolors; вот почему я сохраняю цифру дважды. Вероятно, для этого есть более элегантное решение, но я не могу придумать его в голову. Вот результат; обратите внимание на увеличение alpha от нижнего левого угла к верхнему правому:

введите описание изображения здесь

person tmdavison    schedule 24.08.2015
comment
Большое спасибо, это именно то, что я искал! Это позволяет мне сосредоточить внимание читателя на том, что происходит на самом деле, в то же время представляя вторую переменную с помощью цветовой карты. - person Ielm; 24.08.2015