很抱歉没有图片,但此代码重现了问题:
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值的平滑白色过渡,但似乎有一个模糊的边界我想摆脱。有没有办法做到这一点?
答案 0 :(得分:1)
这是预期的,因为掩盖了小于或等于零的值,然后归一化正值。这可能意味着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
的自定义子类。
以上数据是使用matplotlib 2.0.0rc1 applies color mapping after interpolation制作的。如果您使用以前的版本,您将在第一个图中看到更多的工件。