Question

Je trace un histogramme en utilisant

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

hist2d est une matrice de valeurs d'histogramme. Cela fonctionne bien sauf pour les éléments dans hist2d qui sont nuls. En particulier, j'obtiens l'image suivante

Histogram

mais aimerait que les patchs blancs soient noirs.

Merci!

Était-ce utile?

La solution

Voici une autre méthode qui ne vous oblige pas à boucher avec vos données en définissant une valeur RVB pour les mauvais pixels.

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)

Le problème est que les poubelles avec 0 Je ne peux pas être correctement logique normalisé, de sorte qu'ils sont signalés comme «mauvais», qui sont cartographiés différemment. Le comportement par défaut consiste à ne rien dessiner sur ces pixels. Vous pouvez également spécifier la couleur à dessiner des pixels qui sont sur ou sous les limites de la carte de couleur (la valeur par défaut est de les dessiner comme la couleur la plus élevée / la plus basse).

Autres conseils

Si vous êtes satisfait de la mise à l'échelle des couleurs tels quels et que je veux simplement que les valeurs 0 soient noires, je changerais simplement la matrice d'entrée afin que les 0 soient remplacés par la plus petite valeur suivante:

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)

produit

0- loading=mimimum picture">

Cela a-t-il été généré avec la fonction HIST2D Matplotlib?

Tout ce que vous avez à faire est de passer par la matrice et de définir une valeur de plancher arbitraire, puis assurez-vous de le tracer avec des limites fixes

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

Ensuite, lorsque vous montrez la figure, tous les espaces seront désormais à la valeur du sol et apparaîtront sur le tracé lognormal. Cependant, si vous laissez HIST2D choisir automatiquement la mise à l'échelle pour vous, il voudra utiliser la valeur de plancher 1E-3 comme minimum. Pour éviter cela, vous devez définir les valeurs VMIN et VMAX dans HIST2D

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top