在matplotlib中的白色背景上计算alpha为0.5的基色的RGB等价物

the*_*ist 5 python rgb alpha matplotlib alpha-transparency

我希望能够在白色背景上以 0.5 的 alpha 复制 matplotlib 中原色('r'、'g' 或 'b')的外观,同时将 alpha 保持在 1。

下面是一个示例,通过手动实验,我发现 alpha 为 1 的 RGB 值看起来类似于 matplotlib 默认颜色的 alpha 0.5。

我想知道是否有人有实现这一目标的自动化方法。

import matplotlib.pyplot as plt

s=1000

plt.xlim([4,8])
plt.ylim([0,10])

red=(1,0.55,0.55)
blue=(0.55,0.55,1)
green=(0.54,0.77,0.56)

plt.scatter([5],[5],c='r',edgecolors='none',s=s,alpha=0.5,marker='s')
plt.scatter([6],[5],c='b',edgecolors='none',s=s,alpha=0.5,marker='s')
plt.scatter([7],[5],c='g',edgecolors='none',s=s,alpha=0.5,marker='s')

plt.scatter([5],[5.915],c=red,edgecolors='none',s=s,marker='s')
plt.scatter([6],[5.915],c=blue,edgecolors='none',s=s,marker='s')
plt.scatter([7],[5.915],c=green,edgecolors='none',s=s,marker='s')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

jak*_*vdp 8

编辑:您可以使用此答案中的公式

转换为Python,看起来是这样的:

def make_rgb_transparent(rgb, bg_rgb, alpha):
    return [alpha * c1 + (1 - alpha) * c2
            for (c1, c2) in zip(rgb, bg_rgb)]
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

red = [1, 0, 0]
white = [1, 1, 1]
alpha = 0.5

make_rgb_transparent(red, white, alpha)
# [1.0, 0.5, 0.5]
Run Code Online (Sandbox Code Playgroud)

现在使用这个函数,我们可以创建一个图来确认这是有效的:

from matplotlib import colors
import matplotlib.pyplot as plt

alpha = 0.5

kwargs = dict(edgecolors='none', s=3900, marker='s')
for i, color in enumerate(['red', 'blue', 'green']):
    rgb = colors.colorConverter.to_rgb(color)
    rgb_new = make_rgb_transparent(rgb, (1, 1, 1), alpha)
    print(color, rgb, rgb_new)
    plt.scatter([i], [0], color=color, **kwargs)
    plt.scatter([i], [1], color=color, alpha=alpha, **kwargs)
    plt.scatter([i], [2], color=rgb_new, **kwargs)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明