Frage

Ich zeichne ein Histogramm mit

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

wo hist2d ist eine Matrix von Histogrammwerten.Dies funktioniert gut, außer für Elemente in hist2d das sind Null.Insbesondere erhalte ich das folgende Bild

Histogram

aber möchte, dass die weißen Flecken schwarz sind.

Vielen Dank!

War es hilfreich?

Lösung

Hier ist eine alternative Methode, bei der Sie nicht mit Ihren Daten herumspielen müssen, indem Sie einen RGB-Wert für fehlerhafte Pixel festlegen.

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)

Das Problem ist, dass Behälter mit 0 kann nicht richtig loggen normalisiert werden, so dass sie als 'schlecht' gekennzeichnet sind, die unterschiedlich zugeordnet sind.Das Standardverhalten besteht darin, nichts auf diese Pixel zu zeichnen.Sie können auch angeben, welche Farbe Pixel zeichnen sollen, die über oder unter den Grenzen der Farbkarte liegen (standardmäßig werden sie als höchste / niedrigste Farbe gezeichnet).

Andere Tipps

Wenn Sie mit der Farbskalierung so wie sie ist zufrieden sind und einfach möchten, dass die 0-Werte schwarz sind, würde ich einfach die Eingabematrix so ändern, dass die 0 durch den nächstkleineren Wert ersetzt werden:

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)

produzieren

0- loading=mimimum picture">

Wurde dies mit der matplotlib hist2d-Funktion generiert?

Alles, was Sie tun müssen, ist, die Matrix durchzugehen und einen beliebigen Mindestwert festzulegen, und dann sicherzustellen, dass Sie diesen mit festen Grenzwerten zeichnen

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

wenn Sie dann die Abbildung anzeigen, befindet sich der gesamte Leerraum jetzt auf dem Mindestwert und wird im lognormalen Diagramm angezeigt.Wenn Sie jedoch zulassen, dass hist2d die Skalierung automatisch für Sie auswählt, möchte es den 1e-3-Bodenwert als Minimum verwenden.Um dies zu vermeiden, müssen Sie die Werte für vmin und vmax in hist2d festlegen

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top