2016-12-08 1 views
0

Es tut uns keine Bilder, aber dieser Code reproduziert das Problem:plt.imshow (Z, norm = logNorm()) gibt grauen Entwurf, wenn 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) 

würde ich einen glatten, weißen Übergang erwartet von sehr kleine Werte auf 0 Werte, aber es scheint eine unscharfe Grenze zu geben, die ich gerne loswerden möchte. Gibt es eine Möglichkeit, dies zu tun?

Antwort

1

Dies ist zu erwarten, da Werte kleiner oder gleich Null maskiert werden und dann positive Werte normalisiert werden. Das könnte bedeuten, dass LogNorm nicht die beste Option für Sie ist, aber wenn Sie darauf bestehen, es zu verwenden, können Sie versuchen, den minimalen positiven Wert zum Histogramm hinzuzufügen. In Ihrem Fall wäre es 1, aber machen wir es allgemeiner für, sagen wir, normierte Histogramme.

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

Beachten Sie, dass diese Änderung nicht bilineare Interpolation beeinflussen, sondern könnten auch andere Interpolation Algorithmen beeinflussen. Um sicherzustellen, dass die Interpolation nicht beeinflusst wird, müssen Sie eine benutzerdefinierte Unterklasse von Normalize erstellen.

Die obigen Abbildungen wurden mit Matplotlib 2.0.0rc1, die applies color mapping after interpolation. Wenn Sie eine frühere Version verwenden, werden in der ersten Abbildung noch mehr Artefakte angezeigt.

+0

Hmm. Was du auf deinem ersten Bild hast, wäre in Ordnung, aber es ist nicht das, was ich habe. Es können keine Bilder von der Arbeit hochgeladen werden, aber es gibt eine dunkelgraue Linie entlang der Grenze zwischen maskierten und unmaskierten Bins, die den gesamten Graphen unklar macht, besonders bei kleinen Bins. –

+0

@DanielForsman Ich habe die Antwort aktualisiert, um zu erklären, warum das, was du siehst, noch schlimmer ist. – Goyo