【发布时间】:2020-08-07 13:25:33
【问题描述】:
如果我想绘制两条相互交叉的不透明线,你会在它们相交的区域得到一个不透明度更高的区域:
import matplotlib.pyplot as plt
plt.plot([-1, 1], [0, 0], 'k-', lw=10, alpha=0.5, zorder=1)
plt.plot([0, 0], [-1, 1], 'k-', lw=10, alpha=0.5, zorder=1)
plt.show()
有没有办法避免这种情况,并让交叉区域也具有与其余线条完全相同的颜色和不透明度?
【问题讨论】:
-
Afiak,这不能在 matplotlib 中轻松完成,尽管它会是一个不错的功能。我认为这将被称为“混合模式”,但如果你搜索它,你可以找到this question 结果在哪里,你可以通过自己在 numpy 中对图像进行数学运算来做到这一点,或者使用 cairo 后端一些并发症(请参阅链接的 cmets)。根据您想要做什么,您可能会使用
fill_between。 -
那么,目前最好的解决方案是将所有线条绘制为不透明的,以某种方式将子图栅格化,然后自己将其与其他图层混合?
-
我认为这完全取决于您想要什么。做你展示的情节(没有黑暗的补丁),我想我会选择
fill_between。总的来说,我不确定你真正想要什么,因为你的问题似乎体现了一个矛盾:透明度的全部意义在于看到另一件事背后的事情,但在这里你说你不想看到背后的事情另一个。这是一种很容易做到的“混合模式”——只是让事情变得不透明。所以当我说fill_between时,我是在挑选你问题的各个方面,所以这对我来说很有意义,但也很难一概而论。
标签: python matplotlib