python Matplotlib -如何在不使线条透明的情况下使标记面颜色透明

nfg76nw0  于 2023-05-16  发布在  Python
关注(0)|答案(2)|浏览(147)

我知道如何在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中完成吗?

z9gpfhce

z9gpfhce1#

请参阅下面@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()

请参阅此处了解说明

5t7ly7z5

5t7ly7z52#

在阅读了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), )

就可以了
高温加热

相关问题