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,x
y
的alpha,这应该适用于任意数量的层。
1条答案
按热度按时间gstyhher1#
如果您反转所有颜色,然后只反转背景,会怎么样?(或者可能只反转背景--即,使背景为黑色,然后反转所有颜色)。这样做可行的原因是,任何给定位置的颜色公式都可以确定如下:
1.定义N(x,y)-这是在任何给定坐标
0 = no points
,1 = one point
,2 = 2 overlapping points
等处的多重性。Alpha(x,y) = 1 - (1 - alpha)^N(x,y)
;这是如何合并不透明对象。现在你所搜索的问题是它是一个非线性的结果。我有一些更多的建议包括在下面,但如果你只是试图解决一个问题,我建议你使用一个自定义的色彩Map表,而不是点,因为它会让你有更多的控制和定制,以及解决这个问题在一个自包含的matplotlib的唯一的方法。
如果你能把所有真正的空白变成红色(alpha = 1.0),你可以交换红色和白色来得到你想要的效果。困难在于alpha产生的是背景和点的颜色的混合,因此反转需要真实的空白来匹配前景色(红色),以便反转前景和背景。您必须将绘图保存为图像,然后反转颜色。这个解决方案将完全按照您的期望工作,但不幸的是,它不是matplotlib ONLY解决方案。