plt.imshow(Z,norm=logNorm()) Z=0时给出灰色轮廓

plt.imshow(Z,norm=logNorm()) gives grey outline when 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)

我希望从非常小的值到 0 值的平滑白色过渡,但似乎有一个模糊的边界我想去掉。有什么办法吗?

这是意料之中的,因为小于或等于零的值被屏蔽,然后正值被归一化。这可能意味着 LogNorm 不是您的最佳选择,但如果您坚持使用它,您可以尝试将最小正值添加到直方图中。在您的情况下,它将是 1,但让我们更普遍地使用它,例如,标准化直方图。

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)

请注意,此更改不会影响双线性插值,但可能会影响其他插值算法。为确保插值不受影响,您必须创建 Normalize.

的自定义子类

以上图形是使用applies color mapping after interpolation的matplotlib 2.0.0rc1制作的。如果您使用以前的版本,您会在第一张图中看到更多的瑕疵。