У меня есть двумерные дискретные пространственные данные. Я хотел бы сделать приближение пространственных границ этих данных, чтобы я мог создать сюжет с другим набором данных поверх него.Оценка границы произвольно распределенных данных
В идеале это будет упорядоченный набор (x, y) точек, которые matplotlib может строить с помощью патча plt.Polygon().
Моя первоначальная попытка очень неэлегантна: я помещаю мелкую сетку по данным, и там, где данные находятся в ячейке, квадрат matplotlib создается из этой ячейки. Таким образом, разрешение границы зависит от частоты дискретизации сетки. Вот пример, где серая область - это ячейки, содержащие данные, черные, где нет данных.
1st attempt http://astro.dur.ac.uk/~dmurphy/data_limits.png
ОК, проблема решена - почему я до сих пор здесь? Ну ... Я бы хотел более «элегантное» решение или, по крайней мере, одно, что быстрей (т. Е. Я не хочу заниматься «настоящей» работой, я хотел бы немного повеселиться с этим !). Лучший способ я могу думать о том, в трассировки лучей подход - например:
- от Xmin до Xmax, при у = Ymin, проверьте граничная данные пересеклись в интервалах дх
- у = Ymin + ау, сделайте 1
- сделать 1-2, но теперь в образец у
альтернативой является определение центра, и отбор проб в г-тета пространства - т.е. радиальные спицы в dtheta шагом.
Оба будут производить набор точек (x, y), но тогда как я могу упорядочить/связать соседние точки, чтобы создать границу?
Подход ближайших соседей не подходит, например (для заимствования из географии), перешеек (думаю, что Панама, соединяющая N & S America), может затем закрыть и изолировать регионы. Это также может не очень хорошо отразиться на отверстиях, наблюдаемых в данных, которые я хотел бы представить как другой plt.Polygon.
Решение, возможно, связано с решением проблемы максимизации области. Для набора точек, определяющих пределы данных, какова максимальная смежная область, содержащаяся в этих точках. Чтобы сформировать замкнутую область, каковы соседние точки для n-й точки? Как будут обрабатываться дыры в этой схеме - это теперь заблуждение в топологии?
Извинения, большая часть этого я вслушиваюсь вслух. Я был бы благодарен за некоторые намеки, предложения или решения. Я подозреваю, что это часто изученная проблема со многими методами решения, но я ищу что-то простое для кодирования и быстрого запуска ... Наверное, все на самом деле!
~~~~~~~~~~~~~~~~~~~~~~~~~
ОК, вот попытка # 2, используя идею Марка выпуклых оболочек: alt text http://astro.dur.ac.uk/~dmurphy/data_limitsv2.png
Для этого я использовал qconvex из пакета qhull, получив его, чтобы вернуть крайние вершины. Для заинтересованных:
cat [data] | qconvex Fx> out
Отбор проб по периметру кажется довольно низким, и хотя я не очень много играл с настройками, я не уверен, что могу улучшить точность.
Есть вопрос в «попытка # 2», или вы просто отчетности Результаты? – msw
..но, извините, я просто обновил вопрос, основанный на идее выпуклого корпуса, предложенной ниже. Я думаю, если есть вопрос, то это будет: как я могу увеличить количество сторон в многограннике? Это может быть флаг в qconvex, но я ничего не видел, просмотрев документацию. – Dave