Я использую plot(x,y,'r')
для построения красного круга. x и y - массивы, такие, что при паре в виде (x, y) и на графике все точки образуют круговую линию.
fill(x,y,'r')
отображает красный круг, который заполняется (или окрашен) красным цветом.
Как я могу держать круг белым внутри, но заполнять вне круга до границ оси?
Я изучил использование fill_between(x_array, y1_array, y2_array, where)
, но после небольшой игры с ним я не думаю, что это будет работать для моих массивов x, y. Я думал, что fill_between()
вне круга, и внутри квадрата, который определяется границами оси, но я не думаю, что fill_between()
способен... Im уверен, что я мог бы превратить его в интегральную проблему с delta x и delta y переходя к нулю, но я не желаю.
Если кто-нибудь увидит, что Im пропустил что-то с fill_between()
, пожалуйста, дайте мне знать.
Все, что мне действительно нужно сделать, это замаскировать числа в массиве 2d, которые расположены за пределами этой границы круга, созданного с помощью x и y, так что когда 2D-массив рассматривается как цветной график или контур внутри окружность будет изображением, а снаружи будет белым.
Может ли это быть выполнено с помощью маскирующей техники 2D-массива? Как с помощью masked_where()
? Я еще не изучил его, но буду.
Любые идеи? Благодаря
Изменить 1: Вот что у меня есть разрешение показать, что я думаю, что объяснит мою проблему.
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()