在python matplotlib中使重叠标记减少alpha级别而不是增加alpha级别

ycggw6v2  于 2023-03-03  发布在  Python
关注(0)|答案(1)|浏览(146)

Alpha级别在点重叠的地方增加,因此最暗的区域是点重叠的地方。
相反,我希望阿尔法水平以某种方式彼此相减-这样,如果有一个重叠的部分,它将比没有重叠的部分更轻。
这里有一个例子,我的意思-从左到右的点变暗,因为有更多的重叠:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(20, 3))

# X and Y coordinates for red circles
red_xs = [1]
red_ys = [1]

# Plot with a large markersize
markersize = 35
alpha = 0.1

for i in range(20):
    red_xs[0] += 1
    for add in range(i):
        ax.plot(
            red_xs,
            red_ys,
            marker="o",
            color="r",
            linestyle="",
            markersize=markersize,
            alpha=alpha,
        )

它看起来像:

我希望这一点的逆-能够从最右边的点的alpha级别开始,并在重叠的区域中使该点变暗,这将导致渲染的结果,因为最左边的点很多都被覆盖了。
给予一个更具体的例子,其中点没有 * 完全 * 重叠:

import matplotlib.pyplot as plt
import random

fig, ax = plt.subplots(figsize=(20, 3))

# X and Y coordinates for red circles
red_xs = [1]
red_ys = [1]

# Plot with a large markersize
markersize = 35
alpha = 0.01

random.seed(1)
for j in range(5):
    red_xs = [1]
    red_ys = [1]

    for i in range(20):
        u = 0.1
        v = 0.00000001
        dx = random.uniform(-u, u)
        dy = random.uniform(-u, u)
        red_xs[0] += 2 + dx
        red_ys[0] += dy
        for add in range(i):
            ax.plot(
                red_xs,
                red_ys,
                marker="o",
                color="r",
                linestyle="",
                markersize=markersize,
                alpha=alpha,
            )

外观为:

对于存在重叠点的零件,例如:

解决方案应该渲染y(它们相交的地方)x的alpha,xy的alpha,这应该适用于任意数量的层。

gstyhher

gstyhher1#

如果您反转所有颜色,然后只反转背景,会怎么样?(或者可能只反转背景--即,使背景为黑色,然后反转所有颜色)。这样做可行的原因是,任何给定位置的颜色公式都可以确定如下:
1.定义N(x,y)-这是在任何给定坐标0 = no points1 = one point2 = 2 overlapping points等处的多重性。

  1. Alpha(x,y) = 1 - (1 - alpha)^N(x,y);这是如何合并不透明对象。
    现在你所搜索的问题是它是一个非线性的结果。我有一些更多的建议包括在下面,但如果你只是试图解决一个问题,我建议你使用一个自定义的色彩Map表,而不是点,因为它会让你有更多的控制和定制,以及解决这个问题在一个自包含的matplotlib的唯一的方法。
    如果你能把所有真正的空白变成红色(alpha = 1.0),你可以交换红色和白色来得到你想要的效果。困难在于alpha产生的是背景和点的颜色的混合,因此反转需要真实的空白来匹配前景色(红色),以便反转前景和背景。您必须将绘图保存为图像,然后反转颜色。这个解决方案将完全按照您的期望工作,但不幸的是,它不是matplotlib ONLY解决方案。

相关问题