Подтвердить что ты не робот

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, а цвет лица маркера был полупрозрачным (альфа = 0,5). Можно ли это сделать в matplotlib?

Спасибо.

4b9b3361

Ответ 1

См. ниже @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()

demo figure

см. здесь для объяснения

Ответ 2

Прочитав исходный код matplotlib.line, выясняется, что есть путь к коду (по крайней мере, в Agg, но, вероятно, все серверы), который позволяет вам это делать. Было ли это преднамеренным поведением, я не уверен, но он, безусловно, работает на данный момент. Ключ не должен определять альфа-значение для линии, а определять желаемые цвета вместе с альфа-значением:

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), )

сделает трюк.

НТН