更改facecolor“ alpha”值会产生不必要的边缘(matplotlib pcolormesh)

时间:2018-08-30 15:34:51

标签: python matplotlib

我需要使用pcolormesh引入一个非恒定的alpha值(imshow是先验的,不可能替代,因为我需要对数轴使用对数标度-因此沿每个坐标的间距不规则)。

this post之后,我尝试更改后验面孔的Alpha值。但是,在结果中,我无法消除出现的边缘。

这是一个最小的示例,其中我绘制了一个二维高斯凹凸(只有很少的点),并且alpha从左下角到右上角递增:

from matplotlib import pyplot as plt
import numpy as np

# start with coordinates, corresponding meshgrid to compute the "shading" value and 
# extended coordinate array for pcolormesh (center mesh)
xx = np.linspace(-4,4,7)
xmesh, ymesh = np.meshgrid(xx,xx)
xplot = np.pad(0.5*(xx[1:]+xx[:-1]),1,'reflect',reflect_type="odd") # center & extend
yy = np.exp(-xx[None,:]**2-xx[:,None]**2) # data to plot

# plot the data
fig = plt.figure()
hpc = plt.pcolormesh(xplot, xplot, yy, shading="flat", edgecolor=None)
plt.gca().set_aspect(1)

# change alpha of the faces: lower-left to upper-right  gradient
fig.canvas.draw()  # this generate face color array
colors = hpc.get_facecolor()
grad = ( (xmesh.ravel()+ymesh.ravel())/2. - xx.min() ) / ( xx.max()-xx.min() )
colors[:,3] = grad.ravel()  # change alpha
hpc.set_facecolor(colors)   # update face colors
fig.canvas.draw()           # make the modification appears

结果如下所示:2D高斯凹凸(只有很少的点),alpha从左下角到右上角递增: The result looks like this: 2D gaussian bump (with very few points), with alpha increasing from the lower left to the upper right corner

是否有可能摆脱这些边缘?我的问题是我什至不知道它的来源...我尝试添加hpc.set_antialiased(True)hpc.set_rasterized(True),用hpc.set_facecolor(face)显式添加边,将线宽调整为非常小的值- -这些都不起作用。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

问题是正方形重叠了一点点,并且它们在某种程度上是透明的(您将其alpha值设置为== 1)-因此,在重叠的地方,它们的透明度不如应有的透明,因此看起来像一条线。

您可以通过使正方形不透明来修复它,但正方形的颜色应具有透明的颜色,白色背景:

def alpha_to_white(color):
    white = np.array([1,1,1])
    alpha = color[-1]
    color = color[:-1]
    return alpha*color + (1 - alpha)*white

colors = np.array([alpha_to_white(color) for color in colors])

enter image description here