2012-01-04 6 views

risposta

23

Rimuovere le etichette di spunta e sostituire il testo con patches. Ecco un breve esempio di eseguire questa operazione:

import matplotlib.pyplot as plt 
import matplotlib.patches as patches 


# define where to put symbols vertically 
TICKYPOS = -.6 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(range(10)) 

# set ticks where your images will be 
ax.get_xaxis().set_ticks([2,4,6,8]) 
# remove tick labels 
ax.get_xaxis().set_ticklabels([]) 


# add a series of patches to serve as tick labels 
ax.add_patch(patches.Circle((2,TICKYPOS),radius=.2, 
          fill=True,clip_on=False)) 
ax.add_patch(patches.Circle((4,TICKYPOS),radius=.2, 
          fill=False,clip_on=False)) 
ax.add_patch(patches.Rectangle((6-.1,TICKYPOS-.05),.2,.2, 
           fill=True,clip_on=False)) 
ax.add_patch(patches.Rectangle((8-.1,TICKYPOS-.05),.2,.2, 
           fill=False,clip_on=False)) 

Ciò risulta nella figura seguente:

enter image description here

È per impostare clip_on a False, altrimenti patches fuori degli assi non sarà mostrato. Le coordinate e le dimensioni (raggio, larghezza, altezza, ecc.) Dei patch dipenderanno da dove si trovano gli assi nella figura. Ad esempio, se stai pensando di farlo con sottotrame, dovrai essere sensibile al posizionamento delle patch in modo da non sovrapporsi a nessun altro asse. Potrebbe valere la pena di investigare su Transformations e definire le posizioni e le dimensioni in un'altra unità (Assi, Figura o display).

Se si dispone di file di immagine specifici che si desidera utilizzare per i simboli, è possibile utilizzare la classe BboxImage per creare artisti da aggiungere agli assi anziché alle patch. Per esempio ho fatto una semplice icona con il seguente script:

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(1,1),dpi=400) 
ax = fig.add_axes([0,0,1,1],frameon=False) 
ax.set_axis_off() 

ax.plot(range(10),linewidth=32) 
ax.plot(range(9,-1,-1),linewidth=32) 

fig.savefig('thumb.png') 

produrre questa immagine:

enter image description here

Poi ho creato una BboxImage nella posizione che voglio l'etichetta segno di spunta e della dimensione I vogliono:

lowerCorner = ax.transData.transform((.8,TICKYPOS-.2)) 
upperCorner = ax.transData.transform((1.2,TICKYPOS+.2)) 

bbox_image = BboxImage(Bbox([lowerCorner[0], 
          lowerCorner[1], 
          upperCorner[0], 
          upperCorner[1], 
          ]), 
         norm = None, 
         origin=None, 
         clip_on=False, 
         ) 

notato come ho usato il transData trasformazione convertire da unità di dati per visualizzare unità, whic h sono richiesti nella definizione di Bbox.

Ora ho letto l'immagine utilizzando il imread di routine, e impostarlo di risultati (una matrice NumPy) per i dati di bbox_image e aggiungere l'artista agli assi:

bbox_image.set_data(imread('thumb.png')) 
ax.add_artist(bbox_image) 

Questo si traduce in un dato aggiornato : enter image description here

Se utilizzati direttamente le immagini, assicurarsi di importare le classi ei metodi richiesti:

from matplotlib.image import BboxImage,imread 
from matplotlib.transforms import Bbox