Io uso plot(x,y,'r')
per tracciare un cerchio rosso. xey sono array tali che quando accoppiati come (x, y) e tracciati, tutti i punti formano una linea di cerchio.Fill OUTSIDE of polygon | Array di maschere in cui gli indici sono oltre un limite circolare?
fill(x,y,'r')
traccia un cerchio rosso riempito (o colorato) di rosso.
Come posso mantenere il cerchio bianco all'interno, ma riempire all'esterno del cerchio fino ai limiti dell'asse?
Ho esaminato l'utilizzo di fill_between(x_array, y1_array, y2_array, where)
ma dopo un po 'di gioco non credo che funzionerà con i miei array x, y. Ho pensato a fill_between()
fuori dal cerchio e all'interno di un quadrato definito dai limiti degli assi, ma non penso che lo fill_between()
sia in grado ... Sono sicuro che potrei trasformarlo in un tipo di problema integrale con delta x e delta y andando a zero, ma non sono disposto a farlo.
Se qualcuno può vedere che mi manca qualcosa con fill_between()
per favore fatemelo sapere.
Tutto ciò che devo davvero fare è mascherare i numeri in un array 2D che si trovano oltre questo limite del cerchio creato con x e y, in modo tale che quando l'array 2D viene visualizzato come un tracciato di colore o contorno, all'interno del cerchio ci sarà l'immagine, e all'esterno sarà cancellato il bianco.
Ciò può essere ottenuto con una tecnica di mascheramento dell'array 2D? Ti piace usare masked_where()
? Non l'ho ancora esaminato, ma lo farò.
Qualche idea? Grazie
Modifica 1: Ecco cosa ho il permesso di mostrare che penso spiegherà il mio problema.
from pylab import *
from matplotlib.path import Path
from matplotlib.patches import PathPatch
f=Figure()
a=f.add_subplot(111)
# x,y,z are 2d arrays
# sometimes i plot a color plot
# im = a.pcolor(x,y,z)
a.pcolor(x,y,z)
# sometimes i plot a contour
a.contour(x,y,z)
# sometimes i plot both using a.hold(True)
# here is the masking part.
# sometimes i just want to see the boundary drawn without masking
# sometimes i want to see the boundary drawn with masking inside of the boundary
# sometimes i want to see the boundary drawn with masking outside of the boundary
# depending on the vectors that define x_bound and y_bound, sometimes the boundary
# is a circle, sometimes it is not.
path=Path(vpath)
patch=PathPatch(path,facecolor='none')
a.add_patch(patch) # just plots boundary if anything has been previously plotted on a
if ('I want to mask inside'):
patch.set_facecolor('white') # masks(whitens) inside if pcolor is currently on a,
# but if contour is on a, the contour part is not whitened out.
else: # i want to mask outside
im.set_clip_path(patch) # masks outside only when im = a.pcolor(x,y,z)
# the following commands don't update any masking but they don't produce errors?
# patch.set_clip_on(True)
# a.set_clip_on(True)
# a.set_clip_path(patch)
a.show()
Grazie Joe. il set_clip_path sembra la mia migliore opzione, ma se volessi andare con la prima opzione, dovrei usare il metodo 'MaskedArray()'? – AmyS
@AmyS - Sì, ho aggiunto un esempio per mostrare entrambi i modi di fare le cose. Spero che sia d'aiuto! –
Grazie per gli extra Joe. Intersecante e utile, ma per l'applicazione corrente su cui sto lavorando, il mio limite è definito da due vettori che a volte associati formano un cerchio, a volte no. Io uso 'pcolor()' perché il mio asse è definito da 2 array 2d che non sono sempre cartesiani, e non riesco a capire come gestirlo con 'imshow()'. Fortunatamente, 'set_clip_plath (patch)' è un attr. per 'pcolor()', ma non per 'contour()' o 'plot()' :(Se sei ancora interessato, dare un'occhiata a Modifica 1 sopra della mia domanda e vedere se posso aggiungere il mascheramento patch ad asse senza colore predefinito? – AmyS