Ich verwende plot(x,y,'r')
, um einen roten Kreis zu zeichnen. x und y sind Arrays, bei denen, wenn sie als (x, y) geplottet werden, alle Punkte eine Kreislinie bilden.Füllen Sie OUTSIDE des Polygons | Maskenarray, bei dem die Indices jenseits einer kreisförmigen Grenze liegen?
fill(x,y,'r')
zeichnet einen roten Kreis, der rot ausgefüllt (oder eingefärbt) ist.
Wie kann ich den Kreis weiß auf der Innenseite halten, aber außerhalb des Kreises zu den Achsengrenzen ausfüllen?
Ich schaute in Verwendung fill_between(x_array, y1_array, y2_array, where)
, aber nach ein wenig damit spielen Ich glaube nicht, dass das für meine x, y-Arrays funktioniert. Ich dachte an fill_between()
außerhalb des Kreises, und in einem Quadrat, das durch die Achsengrenzen definiert ist, aber ich glaube nicht fill_between()
ist in der Lage ... Ich bin sicher, dass ich es zu einem integralen Problem mit Delta X und Delta y machen könnte auf Null gehen, aber ich bin nicht dazu bereit.
Wenn jemand sehen kann, dass ich etwas mit fill_between()
vermisse, lass es mich wissen.
Alles, was ich wirklich tun muss, ist Zahlen in einem 2D-Array auszublenden, die jenseits dieser Grenze des Kreises mit x und y erstellt werden, so dass, wenn das 2D-Array als Farbdiagramm oder Kontur angesehen wird, innerhalb des Kreises wird das Bild sein, und außen wird weiß werden.
Kann dies stattdessen durch eine Maskierungstechnik des 2D-Arrays erreicht werden? Wie mit masked_where()
? Ich habe es noch nicht untersucht, werde es aber tun.
Irgendwelche Ideen? Danke
Edit 1: Hier ist, was ich habe Erlaubnis zu zeigen, dass ich denke, wird mein Problem zu erklären.
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()
Danke Joe. der set_clip_path scheint meine beste Option zu sein, aber wenn ich mit der ersten Option gehen wollte, würde ich 'MaskedArray()' Methode verwenden? – AmyS
@AmyS - Ja, ich habe ein Beispiel hinzugefügt, um beide Möglichkeiten zu zeigen, Dinge zu tun. Ich hoffe es hilft! –
Danke für die Extras Joe. Intersting und hilfreich, aber für die aktuelle App, an der ich arbeite, wird meine Grenze durch zwei Vektoren definiert, die manchmal paarweise einen Kreis bilden, manchmal nicht. Ich benutze 'pcolor()', weil meine Achse durch 2 2D-Arrays definiert ist, die nicht immer kartesisch sind, und ich kann nicht herausfinden, wie ich das mit 'imshow()' behandeln soll. Glücklicherweise ist 'set_clip_path (patch)' ein attr. für 'pcolor()', aber nicht für 'contour()' oder 'plot()' :(Wenn Sie noch interessiert sind, würden Sie sich Edit 1 oben in meiner Frage ansehen und sehen, ob ich Maskierung hinzufügen kann patch to axis ohne vordefiniertes pcolor? – AmyS