Matplotlib透明线上的透明点

2024-10-03 00:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想画一条连续线上的散布点。我选择的颜色有一些值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的情况一样)


Tags: textimportalpha源代码matplotlib颜色绘制plt
1条回答
网友
1楼 · 发布于 2024-10-03 00:32:21

在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://stackoverflow.com/questions/25668828/how-to-create-colour-gradient-in-python
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,使散射点位于前景。 enter image description here

相关问题 更多 >