python - real - Matplotlib-Cómo hacer que el color de la cara del marcador sea transparente sin hacer que la línea sea transparente
matplotlib python (2)
Consulte la respuesta de @ Pelson a continuación para conocer la forma correcta de hacerlo con una línea.
Puede hacer esto de una manera hacky Line2D
pegajosamente dos objetos Line2D
independientes.
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.org/users/legend_guide.html#legend-handler para la explicación
Sé cómo establecer la transparencia de una línea en matplotlib. Por ejemplo, el siguiente código hace que la línea y los marcadores sean transparentes.
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)
Quiero alfa de la línea = 1.0, y el color de la cara del marcador es semitransparente (alfa = 0.5). ¿Se puede hacer esto en matplotlib?
Gracias.
Después de leer el código fuente de matplotlib.line
, resulta que hay una ruta de código (al menos en Agg, pero probablemente todos los backends) que le permite hacer esto. Si esto fue alguna vez un comportamiento intencional, no estoy seguro, pero ciertamente funciona en este momento. La clave no es definir un valor alfa para la línea, sino definir los colores deseados junto con un valor alfa:
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()
Probablemente se pueden dar como argumentos en plt.plot
, así que solo
plt.plot(range(10), ''bo-'', markerfacecolor=(1, 1, 0, 0.5), )
hará el truco
HTH