Заполнение дополнений областей matplotlib

Я в настоящее время реализую что-то с Python и matplotlib. Я знаю, как рисовать полигоны, а также как их заполнять, но как заполнить все, кроме интерьера многоугольника? Чтобы быть яснее, я хотел бы изменить приведенный ниже результат, полученный с использованием axhspan и axvspan , путем отсечения горизонтальных и вертикальных красных линий, чтобы получить красный прямоугольник (за пределами которого все вылупилось, как сейчас) : введите описание изображения здесь

2 Solutions collect form web for “Заполнение дополнений областей matplotlib”

Эта статья задает (и отвечает) по существу этот вопрос. Посмотрите на «Редактировать 2» в принятом ответе. В нем описывается, как создать векторный многоугольник размером ваших границ сюжета, а затем как создать дыру в нем в соответствии с формой, которую вы хотите дополнить. Он делает это, назначая строковые коды, которые определяют, рисует ли перо при его перемещении.

Вот часть вышеупомянутой публикации, которая имеет отношение к этому вопросу:

 import numpy as np import matplotlib.pyplot as plt def main(): # Contour some regular (fake) data grid = np.arange(100).reshape((10,10)) plt.contourf(grid) # Verticies of the clipping polygon in counter-clockwise order # (A triange, in this case) poly_verts = [(2, 2), (5, 2.5), (6, 8), (2, 2)] mask_outside_polygon(poly_verts) plt.show() def mask_outside_polygon(poly_verts, ax=None): """ Plots a mask on the specified axis ("ax", defaults to plt.gca()) such that all areas outside of the polygon specified by "poly_verts" are masked. "poly_verts" must be a list of tuples of the verticies in the polygon in counter-clockwise order. Returns the matplotlib.patches.PathPatch instance plotted on the figure. """ import matplotlib.patches as mpatches import matplotlib.path as mpath if ax is None: ax = plt.gca() # Get current plot limits xlim = ax.get_xlim() ylim = ax.get_ylim() # Verticies of the plot boundaries in clockwise order bound_verts = [(xlim[0], ylim[0]), (xlim[0], ylim[1]), (xlim[1], ylim[1]), (xlim[1], ylim[0]), (xlim[0], ylim[0])] # A series of codes (1 and 2) to tell matplotlib whether to draw a line or # move the "pen" (So that there's no connecting line) bound_codes = [mpath.Path.MOVETO] + (len(bound_verts) - 1) * [mpath.Path.LINETO] poly_codes = [mpath.Path.MOVETO] + (len(poly_verts) - 1) * [mpath.Path.LINETO] # Plot the masking patch path = mpath.Path(bound_verts + poly_verts, bound_codes + poly_codes) patch = mpatches.PathPatch(path, facecolor='white', edgecolor='none') patch = ax.add_patch(patch) # Reset the plot limits to their original extents ax.set_xlim(xlim) ax.set_ylim(ylim) return patch if __name__ == '__main__': main() 

Если вам нужно только дополнение прямоугольника, вы можете вместо этого нарисовать вокруг него 4 прямоугольника (например, 4 прямоугольника, которые видны в вашем примере изображения). Координаты краев графика можно получить с помощью xlim() и ylim() .

Я не уверен, что Matplotlib предлагает способ рисования снаружи многоугольника …

  • Гистограмма с уложенной пандой дублирует цвета для больших легенд
  • Как установить диапазон интервалов осей с использованием Matplotlib или других библиотек в python
  • `matplotlib`: какова цель анимированного состояния художника?
  • Латекс на python: \ alpha и \ beta не работают?
  • matplotlib.pyplot.imshow: удаление пробелов в пределах участков при использовании атрибутов «sharex» и «sharey»
  • Python matplotlib colorbar научная нотация базы
  • python matplotlib - контурный график - доверительные интервалы
  • imshow, когда вы рисуете данные, а не изображения. Реализация между аспектом и степенью?
  • Python - лучший язык программирования в мире.