Matplotlib – Come rendere il marcatore faccia di colore trasparente, senza fare la linea trasparente

So come impostare la trasparenza di una linea in matplotlib. Per esempio, il codice riportato di seguito consente la linea e i marcatori trasparente.

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)

Voglio la linea alpha=1.0 e marker colore della faccia di essere semi-trasparente (alfa=0.5). Questo può essere fatto in matplotlib?

Grazie.

  • Si possono tracciare due volte, una volta con una linea solida e una volta con pennarelli trasparenti?
  • Solo dopo che ho fatto la domanda, ho pensato che. Sì, che sarebbe sicuramente lavorare, se non c’è una migliore opzione per impostare il che permette ciò.
  • Mi dispiace, che in realtà non funziona. Dal momento che crea problemi durante la creazione di leggende. Le linee nelle leggende non hanno marcatori in quel caso.
  • matplotlib.org/users/legend_guide.html#legend-handler
InformationsquelleAutor Curious2learn | 2013-04-10



2 Replies
  1. 45

    Vedere @Pelson la risposta qui sotto per il modo corretto di fare questo con una linea.

    Si può fare questo in una hacky modo da sticky legare insieme due indipendenti Line2D oggetti.

    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 - Come rendere il marcatore faccia di colore trasparente, senza fare la linea trasparente

    vedi qui per la spiegazione

    • Bella risposta. Ho particolarmente apprezzato l’illustrazione di come gestire la leggenda.
    • Puoi dire qualcosa su come il rendering vincoli? Ho solo scavato nel AGG codice una sola volta, in modo molto limitato.
    • Si scopre che si può fare questo. Vi posto una risposta ora.
    • Grazie, questo è un modo efficace per creare leggende quando i marcatori sono disegnati separatamente.
  2. 41

    Dopo la lettura del codice sorgente di matplotlib.line, si scopre c’è un percorso di codice (almeno a Agg, ma probabilmente tutti i backend) che ti permette di fare questo. Se mai questo è stato un comportamento intenzionale, non sono sicuro, ma funziona di certo al momento. La chiave è non per definire un valore alfa per la linea, ma per definire i colori desiderati con un valore 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()

    Questi possono probabilmente essere passati come argomenti in plt.plot, quindi, solo

    plt.plot(range(10), 'bo-', markerfacecolor=(1, 1, 0, 0.5), )

    farà il trucco.

    HTH

    • Questo è utile se si desidera avere un diverso alfa per il marcatore viso e il marcatore di bordo, che dovrebbe essere una cosa comune da fare (hint hint).

Lascia un commento