Как мне сгенерировать контурный граф? - PullRequest
3 голосов
/ 18 ноября 2009

Как мне сгенерировать контурный граф следующим образом: контур http://www.fz -juelich.de / vislab / software / gsharp / Gsharp / руководство пользователя / интерполировать / ex6.gif

Достаточно просто, если точки находятся на регулярной сетке, но что, если они не, как в моем примере? Существует ли достаточно простой алгоритм определения цвета для каждого пикселя?

Ответы [ 5 ]

3 голосов
/ 22 апреля 2011

Может быть, немного поздно,

однако в более новых версиях matplotlib вы можете отображать данные в сетку:

http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data

возможно, это поможет

2 голосов
/ 18 ноября 2009

Существует множество алгоритмов интерполяции, которые можно использовать для получения промежуточных точек. Я использовал в ГИС алгоритм Кригинг , и похоже, что данные, которые вы разместили, используют нечто подобное. (Вы можете сказать, потому что, например, «горячие желтые» пятна не центрированы на желтом образце, что было бы в случае линейной интерполяции)

На странице бикубической интерполяции Википедии есть несколько хороших примеров эффекта выбора другой интерполяции.

Для разных данных может потребоваться различная интерполяция.

Затем используйте Gnuplot

как описано здесь, для создания цветовых контуров.

Похоже, он может обрабатывать непрямоугольные данные, , но я бы проверил это предположение.

Пример:

Example GnuPlot contour image
(источник: lanl.gov )

1 голос
/ 19 ноября 2009

Показанное изображение не является традиционным контурным графиком. По сути, это то, что matlab может производить с функцией pcolor, если эта функция может работать непосредственно с разбросанными данными. На самом деле pcolor - это просто серфинг с вызовом для просмотра (0,90).

Если вы действительно хотите увидеть контурный график, самый простой ответ - использовать tricontour , найденный при обмене файлами. Этот инструмент выполняет триангуляцию разбросанных данных, а затем создает контурную диаграмму.

Если вы хотите сгенерировать решение типа pcolor для разбросанного набора данных, тогда простое решение состоит в том, чтобы использовать delaunay для триангуляции данных, затем вызвать trisurf. Звонки могут выглядеть примерно так ...

tri = delaunay(x,y);
trisurf(tri,x,y,z)
view(0,90)

По общему признанию, это решение не даст вам красиво круглой цветной области на исходной картинке. Для этого потребуются другие, более сложные решения. Но так как я еще не уверен, будет ли решение, которое я изложил выше, приемлемо, я остановлюсь здесь пока.

1 голос
/ 18 ноября 2009

С здесь

Исходный XYZ контурный график позволяет создавать контурный график без необходимости преобразования данных XYZ в матрицу. Он использует форму интерполяции под названием триангуляция.

Триангуляция - это разделение поверхностного или плоского многоугольника на набор треугольников, обычно с ограничением на то, что каждая сторона треугольника полностью разделяется двумя смежными треугольниками. Дополнительным преимуществом триангуляции является возможность обработки разреженных, а также неправильные данные.

Звучит как сложно, но выполнимо.

0 голосов
/ 18 ноября 2009

Посмотрите 2D-интерполяцию. Есть несколько простых алгоритмов, но они могут работать не так хорошо (или могут долго вычисляться).

...