Вопрос

Я строю гистограмму, используя

plt.imshow(hist2d, norm = LogNorm(), cmap = gray)

где hist2d представляет собой матрицу значений гистограммы.Это работает нормально, за исключением элементов в hist2d это ноль.В частности, я получаю следующее изображение

Histogram

но хотелось бы, чтобы белые пятна были черными.

Спасибо!

Это было полезно?

Решение

Вот альтернативный метод, который не требует, чтобы вы портили свои данные, устанавливая значение RGB для плохих пикселей.

import copy
data = np.arange(25).reshape((5,5))
my_cmap = copy.copy(matplotlib.cm.get_cmap('gray')) # copy the default cmap
my_cmap.set_bad((0,0,0))
plt.imshow(data, 
           norm=matplotlib.colors.LogNorm(), 
           interpolation='nearest', 
           cmap=my_cmap)

Проблема в том, что контейнеры с 0 не могут быть должным образом нормализованы в журнале, поэтому они помечаются как «плохие», которые сопоставляются по-разному.Поведение по умолчанию — ничего не рисовать на этих пикселях.Вы также можете указать, каким цветом рисовать пиксели, которые выходят за или ниже пределов карты цветов (по умолчанию они рисуются как самый высокий/самый низкий цвет).

Другие советы

Если вас устраивает цветовое масштабирование как есть и вы просто хотите, чтобы значения 0 были черными, я бы просто изменил входную матрицу так, чтобы 0 были заменены следующим наименьшим значением:

import matplotlib.pyplot as plt
import matplotlib.cm, matplotlib.colors
import numpy

hist2d = numpy.arange(9).reshape(3,3)

plt.imshow(numpy.maximum(hist2d, sorted(hist2d.flat)[1]), 
           interpolation='nearest', 
           norm = matplotlib.colors.LogNorm(), 
           cmap = matplotlib.cm.gray)

производит

0- loading=mimimum picture">

Было ли это создано с помощью функции matplotlib hist2d?

Все, что вам нужно сделать, это просмотреть матрицу и установить произвольное минимальное значение, а затем обязательно отобразить его с фиксированными пределами.

for f in hist2d:
   f += 1e-3

тогда, когда вы покажете рисунок, все пробелы теперь будут иметь минимальное значение и будут отображаться на логнормальном графике.Однако, если вы позволяете hist2d автоматически выбирать масштабирование, в качестве минимального будет использоваться минимальное значение 1e-3.Чтобы этого избежать, вам необходимо установить значения vmin и vmax в hist2d.

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top