Matplotlib透明点覆盖在透明线上。

3
我想在一条连续的线上绘制散点。我选择的颜色具有一些alpha<1的值。当我在线的顶部绘制点时,结果变得更加不透明(这是预期的)。下面是一张图片:

enter image description here

以下是相关源代码:
import matplotlib.pyplot as plt
plt.style.use("default")
color   = (0.4, 0.1, 0.9, 1.0)
color50 = (0.4, 0.1, 0.9, 0.5)

# A line
fig, ax = plt.subplots(1,1,figsize=(6,4))
ax.plot([1,2],[1,2], lw = 10, color =color50)

# Point A
ax.scatter(1.4,1.4,  s = 500, color =color)
ax.text(1.38,1.47,"A",)

# Point B
ax.scatter(1.5,1.5,  s = 500, color =color50,alpha = 1.0)
ax.text(1.48,1.57,"B",)

# Point C
ax.scatter(1.7,1.7,  s = 500, color =color50)
ax.text(1.68,1.77,"C",)

# Point D
ax.scatter(1.7,1.3,  s = 500, color =color50)
ax.text(1.68,1.37,"D")

我希望得到的结果与线上的点D相似,但不会使线变得更加不透明(就像点C一样)。

1
不透明度和颜色是两个不同的概念,你应该可以在不使用 alpha=0.5 的情况下得到与点 D 相同的颜色。也许可以尝试使用 (0.69, 0.56, 0.91, 1.0) 这样的数值。当然,也有一些颜色选择器等工具可以帮助你。 - scleronomic
1个回答

3

在 scleronomic 的评论和 this 链接的帮助下,我找到了解决方案:

import matplotlib.pyplot as plt
plt.style.use("default")
color   = (0.4, 0.1, 0.9, 1.0)
color50 = (0.4, 0.1, 0.9, 0.5)

# A line
fig, ax = plt.subplots(1,1,figsize=(6,4))
ax.plot([1,2],[1,2], lw = 10, color =color50)

# Point A
ax.scatter(1.4,1.4,  s = 500, color =color)
ax.text(1.38,1.47,"A",)

# Point B
ax.scatter(1.5,1.5,  s = 500, color =color50,alpha = 1.0)
ax.text(1.48,1.57,"B",)

# Point C
ax.scatter(1.7,1.7,  s = 500, color =color50,zorder=10)
ax.text(1.68,1.77,"C",)

# Point D
ax.scatter(1.7,1.3,  s = 500, color =color50)
ax.text(1.68,1.37,"D")


# The solution based on
# https://dev59.com/1l8e5IYBdhLWcg3whqk4
import matplotlib as mpl
import numpy as np

def colorFader(c1,c2,mix=0):
    c1=np.array(mpl.colors.to_rgb(c1))
    c2=np.array(mpl.colors.to_rgb(c2))
    return mpl.colors.to_hex((1-mix)*c1 + mix*c2)

interpcolor = colorFader(color,(1.0,1.0,1.0),0.5)
# Point E
ax.scatter(1.8,1.8,  s = 500, color =interpcolor)
ax.text(1.78,1.87,"E")

# Point F
ax.scatter(1.9,1.9,  s = 500, color =interpcolor,zorder=3) # zorder>2
ax.text(1.88,1.97,"F")

我需要插值颜色并更改zorder,以使散点图位于前景。 在此输入图片描述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接