Matplotlib – Cómo hacer que el color de la cara del marcador sea transparente sin que la línea sea transparente

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 que la línea alfa = 1.0, y el color de la cara del marcador sean semitransparentes (alfa = 0.5). ¿Se puede hacer esto en matplotlib?

Gracias.

Vea la respuesta de @ Pelson a continuación para conocer la forma correcta de hacerlo con una línea.

Puedes hacer esto de forma pirateada al pegar y pegar dos objetos independientes de 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() 

figura demo

ver aquí para una explicación

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 en todos los backends) que te 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