Python Matplotlib-如何使标记面颜色透明而不使线透明

Python Matplotlib-如何使标记面颜色透明而不使线透明,python,matplotlib,Python,Matplotlib,我知道如何在matplotlib中设置线的透明度。例如,以下代码使线条和标记透明 import numpy as np import matplotlib.pyplot as plt vec = np.random.uniform(0, 10, 50) f = plt.figure(1) ax = f.add_subplot(111) ax.plot(vec, color='#999999', marker='s', alpha=0.5) 我希望线条的alpha=1.0,标记的面颜色是半透明

我知道如何在matplotlib中设置线的透明度。例如,以下代码使线条和标记透明

import numpy as np
import matplotlib.pyplot as plt

vec = np.random.uniform(0, 10, 50)
f = plt.figure(1)
ax = f.add_subplot(111)
ax.plot(vec, color='#999999', marker='s', alpha=0.5)
我希望线条的alpha=1.0,标记的面颜色是半透明的(alpha=0.5)。这可以在matplotlib中完成吗

谢谢。

请参阅下面的@Pelson答案,了解使用一行代码执行此操作的正确方法。 通过将两个独立的
Line2D
对象粘在一起,您可以用一种黑客的方式来实现这一点

th = np.linspace(0, 2 * np.pi, 64)
y = np.sin(th)
ax = plt.gca()

lin, = ax.plot(th, y, lw=5)
mark, = ax.plot(th, y, marker='o', alpha=.5, ms=10)

ax.legend([(lin, mark)], ['merged'])
plt.draw()


阅读
matplotlib.line
的源代码后,您可以通过一个代码路径(至少在Agg中,但可能是所有后端)来进行解释。我不确定这是否是故意的行为,但目前它确实有效。关键不是定义线条的alpha值,而是定义所需的颜色以及alpha值:

import matplotlib.pyplot as plt

plt.plot([0, 1], [1, 0], 'k')
# Do not set an alpha value here
l, = plt.plot(range(10), 'o-', lw=10, markersize=30)

l.set_markerfacecolor((1, 1, 0, 0.5))
l.set_color('blue')

plt.show()
这些可能在
plt.plot
中作为参数给出,所以

plt.plot(range(10), 'bo-', markerfacecolor=(1, 1, 0, 0.5), )
我会成功的


HTH

你能画两次吗,一次用实线,一次用透明标记?我刚问完这个问题,我就想了一下。是的,这肯定会起作用,除非有更好的选项来设置实现这一点的选项。@mgilson抱歉,这实际上不起作用。因为这会在创建图例时产生问题。在这种情况下,图例中的线条没有标记。回答得很好。我特别喜欢关于如何处理图例的插图。@pelson你能谈谈渲染约束是如何处理的吗?我只以非常有限的方式深入研究了AGG代码一次,结果证明你可以做到这一点。现在我将发布一个答案。谢谢,这是一种在单独绘制标记时创建图例的简洁方法。如果您想为标记面和标记边使用不同的alpha,这将非常有用,这应该是一个常见的操作(提示)。谢谢,与此一起非常有用。例如,
plt.plt(范围(10),'bo-',markeredgecolor='b',markerfacecolor=colors.to_rgba('b',0.5))