Yo uso plot(x,y,'r')
para trazar un círculo rojo. xey son matrices tales que cuando se emparejan como (x, y) y se trazan, todos los puntos forman una línea circular.Rellenar FUERA del polígono | Máscara de matriz donde las indicaciones están más allá de un límite circular?
fill(x,y,'r')
traza un círculo rojo que está rellenado (o coloreado) en rojo.
¿Cómo puedo mantener el círculo blanco en el interior, pero llenar el círculo fuera de los límites del eje?
Intenté usar fill_between(x_array, y1_array, y2_array, where)
pero después de jugar un poco con él no creo que funcione para mis matrices x, y. Pensé en fill_between()
fuera del círculo, y dentro de un cuadrado que está definido por los límites del eje, pero no creo que fill_between()
sea capaz ... Estoy seguro de que podría convertirlo en un tipo de problema integral con delta x y delta y yendo a cero, pero no estoy dispuesto a hacerlo.
Si alguien puede ver que me falta algo con fill_between()
, por favor avíseme.
Todo lo que realmente necesito hacer es enmascarar números en una matriz 2d que se encuentran más allá de este límite del círculo creado con xey, de modo que cuando la matriz 2D se ve como un trazado de color o contorno, dentro del círculo estará la imagen, y afuera se verá blanco.
¿Se puede lograr esto mediante una técnica de enmascaramiento de la matriz 2D en su lugar? Me gusta al usar masked_where()
? No he investigado todavía, pero lo haré.
¿Alguna idea? Gracias
Edit 1: Esto es lo que tengo permiso para mostrar que creo que explicará mi 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()
Thanks Joe. el set_clip_path parece mi mejor opción, pero si quisiera ir con la primera opción, ¿usaría el método 'MaskedArray()'? – AmyS
@AmyS - Sí, agregué un ejemplo para mostrar ambas formas de hacer las cosas. ¡Espero eso ayude! –
Gracias por los extras Joe. Interesante y útil, pero para la aplicación actual en la que estoy trabajando, mi límite está definido por dos vectores que cuando se emparejan a veces forman un círculo, a veces no. Yo uso 'pcolor()' porque mi eje está definido por 2 matrices de 2d que no siempre son cartesianas, y no puedo entender cómo manejar eso con 'imshow()'. Afortunadamente, 'set_clip_plath (patch)' es un attr. para 'pcolor()', pero no para 'contour()' o 'plot()' :(Si aún está interesado, eche un vistazo a Edit 1 arriba de mi pregunta y vea si puedo agregar masking parche a eje sin pcolor predefinido? – AmyS