2012-02-26 2 views
3

Я черчение гистограммы с помощьюПроблем с нулями в matplotlib.colors.LogNorm

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

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

Histogram

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

Спасибо!

ответ

1

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

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->mimimum picture

8

альтернативный метод, который не требует, чтобы сбросить с вашими данными, установив значение 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 не может быть должным образом войти нормированы так, что они flaged как «плохие», которые отображаются по-разному. Поведение по умолчанию - это не рисовать что-либо на этих пикселях. Вы также указываете, какой цвет рисовать пиксели, которые превышают или находятся под границами цветовой карты (по умолчанию это делается как самый высокий/самый низкий цвет).

-1

Было ли это сгенерировано функцией matplotlib hist2d?

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

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

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

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4) 
Смежные вопросы