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制作的。如果您使用以前的版本,您会在第一张图中看到更多的瑕疵。
抱歉没有图片,但此代码重现了问题:
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制作的。如果您使用以前的版本,您会在第一张图中看到更多的瑕疵。