【发布时间】:2014-12-29 09:31:45
【问题描述】:
在处理重叠的高密度散点图或不同颜色的线图时,可以方便地实施加法混合方案,其中每个标记的 RGB 颜色相加在一起以在画布中生成最终颜色。这是 2D 和 3D 渲染引擎中的常见操作。
但是,在 Matplotlib 中,我只发现了对 alpha/opacity 混合的支持。有什么迂回的方法吗?还是我坚持渲染到位图,然后将它们混合到某个绘图程序中?
编辑:这是一些示例代码和手动解决方案。
这将产生两个部分重叠的随机分布:
x1 = randn(1000)
y1 = randn(1000)
x2 = randn(1000) * 5
y2 = randn(1000)
scatter(x1,y1,c='b',edgecolors='none')
scatter(x2,y2,c='r',edgecolors='none')
这将在 matplotlib 中产生以下内容:
如您所见,有一些重叠的蓝点被红点遮挡,我们希望看到它们。通过在 matplotlib 中使用 alpha/opacity blending,您可以:
scatter(x1,y1,c='b',edgecolors='none',alpha=0.5)
scatter(x2,y2,c='r',edgecolors='none',alpha=0.5)
这将产生以下内容:
但我真正想要的是以下内容:
我可以通过将每个绘图独立地渲染到位图来手动完成:
xlim = plt.xlim()
ylim = plt.ylim()
scatter(x1,y1,c='b',edgecolors='none')
plt.xlim(xlim)
plt.ylim(ylim)
scatter(x2,y2,c='r',edgecolors='none')
plt.xlim(xlim)
plt.ylim(ylim)
plt.savefig(r'scatter_blue.png',transparent=True)
plt.savefig(r'scatter_red.png',transparent=True)
这给了我以下图片:
然后您可以将它们作为独立图层加载到 Paint.NET/PhotoShop/gimp 中,然后添加混合它们。
现在理想的是能够在 Matplotlib 中以编程方式执行此操作,因为我将处理数百个这些!
【问题讨论】:
-
最简单的方法可能是制作二维直方图。请向我们展示一些示例代码和数据以帮助我们入门。
-
谢谢,刚刚添加了一些示例代码和手动解决方案的步骤。
-
谢谢,现在问题好多了,看看我能做什么。
-
我不认为这是我们支持开箱即用的模式。
-
我也不明白您关于“固定颜色背景”的评论,它应该与画布上当前的内容混合。
标签: python matplotlib blending color-blending