Наложение карты внимания с изображением в Python [дубликат]

Симон Моурир дал этот пример :

object o = null;
DateTime d = (DateTime)o;  // NullReferenceException

, где unboxing преобразование (литье) из object (или из одного из классов System.ValueType или System.Enum или из типа интерфейса) - тип значения (кроме Nullable<>) сам по себе дает NullReferenceException.

В другом направлении конверсия бокса из a Nullable<>, которая имеет HasValue, равную false , на ссылочный тип, может дать ссылку null, которая затем может привести к NullReferenceException. Классический пример:

DateTime? d = null;
var s = d.ToString();  // OK, no exception (no boxing), returns ""
var t = d.GetType();   // Bang! d is boxed, NullReferenceException

Иногда бокс происходит по-другому. Например, с помощью этого не общего метода расширения:

public static void MyExtension(this object x)
{
  x.ToString();
}

следующий код будет проблематичным:

DateTime? d = null;
d.MyExtension();  // Leads to boxing, NullReferenceException occurs inside the body of the called method, not here.

Эти случаи возникают из-за специальных правил, используемых во время выполнения при боксе Nullable<> экземпляров.

20
задан Anake 12 April 2012 в 17:35
поделиться

1 ответ

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

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

EDIT:

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

  • Сначала выберите объект matplotlib colormap (в вашем случае, для белого и черного, вы можете взять «двоичный» '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 [/g2]

27
ответ дан gcalmettes 26 August 2018 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: