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)
im = plt.imshow(h + np.min(h[h > 0]), norm=LogNorm(), cmap=plt.cm.Greys,
interpolation='bilinear')
plt.colorbar(im)
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.
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. –
@DanielForsman Ich habe die Antwort aktualisiert, um zu erklären, warum das, was du siehst, noch schlimmer ist. – Goyo