Подтвердить что ты не робот

Наложение imshow участков в matplotlib

Я хотел бы сравнить два разных набора данных на одном и том же графике imshow, чтобы было легко увидеть различия. Мой первый инстинкт заключается в том, чтобы сделать цвета в прозрачной цветовой палитре (более низкие значения особенно), но я не смог заставить это работать:

from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np

# create dummy data
zvals =  np.random.rand(100,100)*10-5
zvals2 = np.random.rand(100,100)*10-5

# generate the transparent colors
color1 = colorConverter.to_rgba('white',alpha=0.0)
color2 = colorConverter.to_rgba('black',alpha=0.8)

# make the colormaps
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256)

img2 = plt.imshow(zvals,interpolation='nearest',cmap=cmap1,origin='lower')
img3 = plt.imshow(zvals2,interpolation='nearest',cmap=cmap2,origin='lower')

plt.show()

Ошибка отсутствует, но белый и черный из второго графика не показывают прозрачности. Я также попробовал метод colorConverter, чтобы установить цвет в обычной ситуации plt.plot, и цвет также не стал прозрачным, хотя был отображен правильный цвет.

Любые дополнительные советы о том, как накладывать/сравнивать графики imshow, будут высоко оценены

4b9b3361

Ответ 1

Вы можете установить аргумент alpha в своей команде imshow.

В вашем примере img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower', alpha=0.6)

EDIT:

Спасибо за разъяснение. Вот описание того, что вы можете сделать:

  • Сначала выберите объект matplotlib colormap (в вашем случае, для белого и черного, вы можете взять "двоичный" цветной пакет). Или создайте свой собственный цветовой пакет, как и вы, если цветовая палитра, которую вы хотите, еще не существует.
  • Затем инициализируйте этот объект colormap: это заставит его внутренне создать массив с именем "_lut", который содержит значения rgba.
  • Затем вы можете заполнить альфа-значения в соответствии с тем, что вы хотите достичь (в вашем примере создайте массив от 0 до 0,8).
  • Затем вы можете использовать эту комбинацию цветов

Ниже приведен пример вашего кода:

from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

# create dummy data
zvals = np.ones((100,100))# np.random.rand(100,100)*10-5
zvals2 = np.random.rand(100,100)*10-5

# generate the colors for your colormap
color1 = colorConverter.to_rgba('white')
color2 = colorConverter.to_rgba('black')

# make the colormaps
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256)

cmap2._init() # create the _lut array, with rgba values

# create your alpha array and fill the colormap with them.
# here it is progressive, but you can create whathever you want
alphas = np.linspace(0, 0.8, cmap2.N+3)
cmap2._lut[:,-1] = alphas

img2 = plt.imshow(zvals, interpolation='nearest', cmap=cmap1, origin='lower')
img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower')

plt.show()

image