【问题标题】:Pyplot pcolormesh confused when alpha not 1当 alpha 不是 1 时,Pyplot pcolormesh 会感到困惑
【发布时间】:2013-12-19 10:14:52
【问题描述】:

我对 pyplot 令人敬畏的绘图能力有些困难。我选择了我自己的颜色图

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)])

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

问题是当我使用它来绘制一些东西时,比如

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

结果是这样的:

这看起来不错,但是您可以清楚地看到每个框的周围都有一个与框颜色相同但alpha设置为1的非常细的边框。

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

有办法清理吗?

【问题讨论】:

  • 会不会是相邻的框只是稍微重叠?我不认为每个框周围都有边框。
  • 听起来很有可能。知道如何解决这个问题吗?
  • 您可以尝试不同的后端或不同的输出格式。如何详细创建 PNG?
  • 我刚刚保存了方法输出的输出(在它创建的窗口中)

标签: python matplotlib


【解决方案1】:

与此同时,作为一个小解决方法,我发现您可以通过混淆edgecolorlinewidth 属性来使图像更接近您想要的图像。例如,对pcolormesh 使用以下输入:

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

输出如下图片:

【讨论】:

  • 为什么选择这种特殊的值 edgecolor=(1.0, 1.0, 1.0, 0.3), linewidth=0.0015625 ?
  • 经过反复试验,我确定了这些值。这个想法是使用边缘来减轻正方形之间的重叠,所以我需要具有适当透明度的白色来使重叠与内部匹配,并且选择的线宽大约是重叠的宽度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
相关资源
最近更新 更多