Pergunta

Estou traçando um histograma usando

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

onde hist2d é uma matriz de valores do histograma.Isso funciona bem, exceto para elementos em hist2d isso é zero.Em particular, obtenho a seguinte imagem

Histogram

mas gostaria que as manchas brancas fossem pretas.

Obrigado!

Foi útil?

Solução

Aqui está um método alternativo que não exige que você altere seus dados, definindo um valor RGB para pixels ruins.

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)

O problema é que as caixas com 0 não podem ser devidamente normalizados em log, então eles são sinalizados como 'ruins', que são mapeados de forma diferente.O comportamento padrão é não desenhar nada nesses pixels.Você também pode especificar a cor para desenhar os pixels que estão acima ou abaixo dos limites do mapa de cores (o padrão é desenhá-los como a cor mais alta/mais baixa).

Outras dicas

Se você estiver satisfeito com a escala de cores como está e simplesmente quiser que os valores 0 sejam pretos, eu simplesmente alteraria a matriz de entrada para que os 0s fossem substituídos pelo próximo menor valor:

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)

produz

0- loading=mimimum picture">

Isso foi gerado com a função matplotlib hist2d?

Tudo o que você precisa fazer é percorrer a matriz e definir algum valor mínimo arbitrário e, em seguida, certifique-se de plotá-lo com limites fixos

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

então, quando você mostrar a figura, todos os espaços em branco estarão agora no valor mínimo e aparecerão no gráfico lognormal.No entanto, se você permitir que o hist2d escolha automaticamente a escala para você, ele desejará usar o valor mínimo de 1e-3.Para evitar isso, você precisa definir os valores vmin e vmax em hist2d

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top