2013-12-19 29 views
7

我在pyplot的真棒绘图能力有一些困难。我选择我自己的颜色表pyplot pcolormesh困惑时,alpha不是1

n = 6 
map = matplotlib.cm.get_cmap('Dark2') 
cmap = colors.ListedColormap([(0,0,0,0)] + [[map(i * 1.0/n)[j] for j in range(3)] + [0.2] for i in range(1, n + 1)]) 

这基本上只是深色2颜色表,离散为n(在我的情况6)与零值映射到纯白值。但是,主要区别在于我的自定义色彩映射的alpha值设置为0.2,而不是默认的1

的问题是,当我绘制使用这个东西,像

plt.pcolormesh(np.random.rand(10,10), cmap = cmapInv) 

的结果是这样的:

Result

这看起来很不错,但你可以清楚地看到,在每个框的周围,有一个与框相同颜色的非常薄的边框,但alpha设置为1

编辑:正如在评论中所建议的,这些边框的原因可能在框之间重叠。

有没有办法清理这个?

+2

莫非相邻盒子只是稍微重叠?我不认为每个盒子都有边框。 –

+0

听起来很可能。任何想法如何解决这个问题? – 5xum

+0

您可以尝试不同的后端或不同的输出格式。你如何创建PNG的细节? –

回答

5

作为一个较小的解决方法,在此期间,我发现您可以通过与edgecolorlinewidth属性相混淆使图像更接近想要的内容。例如,使用下面的输入,以pcolormesh

plt.pcolormesh(np.random.rand(10,10), cmap = cmapInv, edgecolor=(1.0, 1.0, 1.0, 0.3), linewidth=0.0015625) 

输出以下图像:

enter image description here

+0

为什么这个值的选择edgecolor =(1.0,1.0,1.0,0.3),linewidth = 0.0015625? – Andyk

+0

我在经过反复试验后确定了数值。这个想法是使用边缘来减轻正方形之间的重叠,所以我需要具有合适透明度的白色以使重叠与内部匹配,并且线宽被选择为近似重叠的宽度。 – azaghal