我知道如何在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中完成吗?
谢谢。
答案 0 :(得分:35)
您可以通过将两个独立的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()
see here了解
答案 1 :(得分:34)
在阅读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