2016-12-08 14 views
0

Извините за без картинок, но этот код воспроизводит проблему:plt.imshow (Z, норма = logNorm()) дает серый контур, когда Z = 0

x=np.random.randn(1000) 
y=np.random.randn(1000) 
h,_,_=np.histogram2d(x,y) 
plt.imshow(h, norm=LogNorm(), cmap=plt.cm.Greys) 

Я бы ожидать плавный переход от белого очень небольшие значения до 0 значений, но, похоже, есть размытая граница, от которой я бы хотел избавиться. Есть какой-либо способ сделать это?

ответ

1

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

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

x = np.random.randn(1000) 
y = np.random.randn(1000) 
h, _, _ = np.histogram2d(x, y) 
im = plt.imshow(h, norm=LogNorm(), cmap=plt.cm.Greys, 
       interpolation='bilinear') 
plt.colorbar(im) 

histogram1

im = plt.imshow(h + np.min(h[h > 0]), norm=LogNorm(), cmap=plt.cm.Greys, 
       interpolation='bilinear') 
plt.colorbar(im) 

enter image description here

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

Вышеуказанные рисунки были сделаны с использованием matplotlib 2.0.0rc1, который applies color mapping after interpolation. Если вы используете предыдущую версию, вы увидите еще больше артефактов на первом рисунке.

+0

Хм. То, что у вас на первом снимке, было бы неплохо, но это не то, что у меня есть. Невозможно загрузить изображения с работы, но на границе между замаскированными и незамасленными ячейками есть темно-серая линия, что делает весь график неясным, особенно с небольшими ящиками. –

+0

@ DanielForsman Я обновил ответ, чтобы объяснить, почему то, что вы видите, еще хуже. – Goyo