добавить белый цвет в pylab colorbar colormap по умолчанию

Привет у меня есть следующий код:

rateMap, occMap, spikeMap = pickle.load(open(rateMapFileName))

pl.imshow(rateMap)
pl.colorbar()

Теперь occMap-это карта занятости, содержащая позиции x, y в нескольких временных метках. Есть некоторые точки x, y местоположения, которые не имеют занятости (т. е. = 0 значение при этом значении матрицы)

Когда я строю карту скорости (которая = spikeMap / occMap), используя сценарий выше. Созданная цветовая панель использует цветовую карту jetmap по умолчанию. Я хочу, чтобы значения null/0 из occMap отображались белым цветом на графике rateMap. Так или иначе, чтобы добавить ноль в функцию colorbar? а также связывая его с occMap

Я пытался смотреть на этот скрипт как добавить «черный» в matplotlib colormap? но не мог заставить его работать?

Вот пример изображения, которое имеет белые пятна, в основном относящиеся к местоположению x, y со значением 0 или без занятости:

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

*****РЕДАКТИРОВАТЬ****
Я пытался играть с кодом, вот как я был добавлен белый цвет в цветовую карту, но я хочу добавить этот белый цвет в цветовую карту по умолчанию jet. Есть предложения??

cmap = LinearSegmentedColormap.from_list('mycmap', ['white', 'blue', 'cyan', 'green', 'yellow','red'])
fig, ax = plt.subplots()
im = ax.imshow(im, cmap=cmap, interpolation='nearest')
fig.colorbar(im)
plt.show()

1 ответ

  1. Для вашей проблемы я предлагаю установить первый уровень больше нуля и использовать функцию расширения colorbar для указания нулевых местоположений x, y.

    Сначала мы импортируем libs и пытаемся генерировать некоторые случайные данные из numpyнормальной функции распределения на разреженной сетке.

    from copy import copy
    
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.colors as colors
    
    # generate sample data
    x0, x1 = -5, 5
    y0, y1 = -3, 3
    x = np.linspace(x0, x1, 60)
    y = np.linspace(y0, y1, 60)
    X, Y = np.meshgrid(x, y)
    Z = np.random.randn(60, 60)
    

    Чтобы проиллюстрировать вашу проблему, мы устанавливаем все отрицательные значения на ноль, представляя неотрицательные данные сетки Z.

    Z = np.where(Z > 0, Z, 0)
    

    Теперь переходим к главному! Просто добавьте цвет вне диапазона в цветовую карту.

    palette = copy(plt.get_cmap('viridis_r'))
    palette.set_under('white', 1.0)  # 1.0 represents not transparent
    

    Вы также можете использовать set_overset_badметоды для установки цвета для данных за пределами диапазона и неопределенных (NaN) данных.

    Набор вложенных диаграмм:

    fig, ax = plt.subplots(1, 1)
    

    Установите уровни для графика, но не забудьте изменить нижний уровень на положительное число, близкое к нулю.

    levels = np.arange(0, 3.5, 0.5)
    levels[0] = 1e-5
    

    Вот как построить массив Z.

    norm = colors.BoundaryNorm(levels, ncolors=palette.N)
    im = ax.imshow(Z, cmap=palette,
                   norm=norm,
                   aspect='auto', extent=[x0, x1, y0, y1])
    # Possible extend options include: ['min', 'max', 'both', 'neither']
    cbar = fig.colorbar(im, extend='min', shrink=0.9, ax=ax)
    plt.savefig('draw.png', dpi=300)
    # or
    # plt.show()
    

    рисовать.формат PNG

    Отображение самого низкого уровня как 0.0 может привести к некоторой неоднозначности, возможно, установка уровней[0] на 0.1 выглядит лучше для вас.

    Вы можете обратиться к следующим ссылкам для получения дополнительной информации:

    https://matplotlib.org/examples/pylab_examples/image_masked.html

    https://matplotlib.org/examples/pylab_examples/contourf_demo.html