简而言之:我使用matplotlib
绘制了scater图和曲面。我遇到了一个问题,因此表面总是绘制在点的顶部,而不是像它应该的那样。Matplotlib:混色或如何预处理颜色以抵消透明度
我想通过对点的颜色进行预处理来解决这个问题,以便在被表面覆盖时获得“原始颜色”,这样表面会出现在点的后面。我使用HEX
值指定了color
的点数。
我遇到的表面和点的问题与here描述的问题类似。
下面是详细信息:
我在Matplotlib蓝和红点的三维散点图:
self.subplot_3d = self.subplot.scatter(x_red, y_red, z_red, s = 150, c = RED, depthshade = False, lw = 0, alpha = 1)
self.subplot_3d = self.subplot.scatter(x_blue, y_blue, z_blue, s = 150, c = BLUE, depthshade = False, lw = 0, alpha = 1)
点是线性可分的 - 存在一个分离平面,其分离红点和蓝点。我画使用
self.plane = self.subplot.plot_surface(X, Y, Z, antialiased = True, color = RED_BACKGROUND, alpha = 0.5)
我想画两个地块平原:第一,没有分离纯拉 - 只有红色和蓝色点(左)。在第二个有一个分离平面(右)。
一旦分离面被绘制时,我无法迫使平面红色和蓝色点(如从平面方程和点的位置预期)的平面之间绘制总是出现在所有要点之上。
的解决方案,我想大概是这样的:“预处理”蓝点的颜色,这样,当与透明平面的颜色叠加我得到原来的蓝色。通过这种方式,这些点将显示在飞机的顶部,它应该“解决”我当前的问题。
我已经使用HEX
color specification,我不确定当我在matplotlib中使用透明度时颜色是如何混合的。我正在寻找参考或建议,我应该如何“抵消”飞机的红色透明颜色,例如alpha = 0.2
。
换句话说,我想才达到类似sepicifiying: Blue = #0000FF
Red = #FF0000
PreProcBlue = "#-FF00FF"'
使PreProcBlue + Red = Blue
。
谢谢!
如果曲面应该位于** all **点的后面,那么您可以简单地使用'zorder'参数(例如,表面为'zorder = -1',点为'zorder = 1')。 – ImportanceOfBeingErnest
当用半透明平面覆盖时出现蓝色的点出现了什么问题?然后你会有红点和不那么蓝点。无论如何,你在这里尝试的解决方案是不可能的。 – ImportanceOfBeingErnest
@ImportanceOfBeingErnest感谢您的评论,第一条评论:表面平面应该位于红点和蓝点之间,即红点和蓝点之间。 'zorder'不起作用,我尝试了不同的方式。对第二个评论:我想和飞机以及没有飞机的情况并排放置,所以我想要在这两个地块上匹配蓝色点的颜色。我对高质量的自动输出感兴趣,所以颜色的小变化很重要,否则,我不会打扰。 – them