Как заполнить область внутри многоугольника в Python с помощью matplotlib?

Вот код, который я пробовал:

from scipy.spatial import ConvexHull
points = np.random.rand(30, 2)   # 30 random points in 2-D
hull = ConvexHull(points)

import matplotlib.pyplot as plt
%matplotlib inline
corners=[]
for simplex in hull.simplices:
    corners+=list(simplex)
plt.fill(points[corners, 0], points[corners, 1], 'k',alpha=0.3)

Единственный график, который я могу получить, это: Выпуклая оболочка случайного набора точек в matplotlib Как вы видно, что он частично заполнен.

Но я бы хотел, чтобы вся область внутри этого полигона была заполнена.

Как это сделать?

Я ценю любой ваш совет!

Обновление: ответ!!!

На самом деле я только что нашел ответ. Это было на официальном сайте наука:

Мы также могли бы напрямую использовать вершины корпуса, которые для 2D гарантированно располагаются против часовой стрелки.

Итак, чтобы делать то, что я хочу, мне просто нужно было использовать:

plt.fill(points[hull.vertices,0], points[hull.vertices,1], 'k', alpha=0.3)

вместо последних 4 строк моего верхнего кода.

Может быть, этот вопрос / ответ поможет кому-то еще.


person Nataly    schedule 27.03.2016    source источник
comment
Я думаю, вы должны отсортировать точки по их полярному углу, а затем построить их.   -  person jure    schedule 27.03.2016
comment
Пожалуйста, добавьте это обновление в качестве ответа, чтобы другие могли видеть, что проблема решена.   -  person jure    schedule 27.03.2016


Ответы (1)


На самом деле я только что нашел ответ. Это было на официальном сайте SciPy:

Мы также могли бы напрямую использовать вершины корпуса, которые для 2-D гарантированно будут в порядке против часовой стрелки. Итак, чтобы сделать то, что я хочу, мне просто нужно было использовать:

plt.fill(points[hull.vertices,0], points[hull.vertices,1], 'k', alpha=0.3)

вместо последних 4 строк моего верхнего кода.

Может быть, этот вопрос / ответ поможет кому-то еще.

person Nataly    schedule 29.03.2016