LINUX.ORG.RU
решено ФорумTalks

Построение графиков по трёхмерным данным и наличием пустых областей


0

1

Есть некоторые данные: x, y, z (где x и y — координаты замера величины, а z — значение величины). Нужно построить изолинии и цветовую карту.

Но! Также существуют места, где величины просто нету. Представьте себе, скажем, трапецию из некоторого материала. А замерямой величиной пусть будет температура материала. Внутри трапеции температура измерима, а за её пределами такого нету, там пустота, вакуум.

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

Где такое можно визуализировать, кроме как в Golden Software Surfer?

★★★★★

То есть два шага:

1) задаём полигон (с дырками), где есть величина

2) рисуем внутри него данные по точкам

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от dikiy

grid_data должно быть именно что grid...

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от dikiy

нет никакой функции, есть набор произвольных точек на плоскости и полигон (с дырками), причём такой, что все точки принадлежат ему.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

>нет никакой функции, есть набор произвольных точек на плоскости и полигон (с дырками), причём такой, что все точки принадлежат ему.

Ну дык сделай функцию такую, чтобы брала данные оттуда и множила.

или забей эти точки нулями сам.

Что в общем-то одно и то же.

dikiy ★★☆☆☆
()
Ответ на: комментарий от Obey-Kun

>WTF нефизичные данные?

Например ольшая или маленькая констана или NaN (гнуплот умеет его обрабатывать).

aedeph
()
Ответ на: комментарий от Obey-Kun

>> или забей эти точки нулями сам.

нуль — это тоже значение, мне это не подходит

ну тогда -inf.

dikiy ★★☆☆☆
()
Ответ на: комментарий от Obey-Kun

А забей значениями, в зависимости от ЯП «None».
Часто сам так делаю. Сам рисую графики стандартными средствами пистона, но по идее должно где угодно работать.

Siado ★★★★★
()
Ответ на: комментарий от Siado

> А забей значениями, в зависимости от ЯП «None».

А у меня сетки нет, куда эти NaN-ы вбивать и в каком количестве? Область с данными представлена полигоном, данные представлены как координаты+значение, без привязки к сетке.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Кривой конечно вариант, но может интерполяция спасет куна?

И не понятно, что из себя представляет полигон. Некая характеристическая функция?

aedeph
()
Ответ на: комментарий от aedeph

Полигон = внешний многоугольник + внутренние многоугольники (дырки).

Вот полигон, внешний многоугольник является невыпуклым восьмиугольником и имеется одна пятиугольная дырка: http://img269.imageshack.us/img269/2127/polygony.png

Obey-Kun ★★★★★
() автор топика

Можно нарисовать полигоны окружающего трафарета в tikz, а можно использовать терминал svg и трафарет вставить руками в получившийся векторный рисунок.

mclaudt
()
Ответ на: комментарий от Obey-Kun

Вот тут есть что-то похожее (смотрите вторую картинку): http://www.weask.us/entry/plotting-color-map-zip-codes-python

Вот картинка оттуда: http://files.eduardoleoni.com/mapUS.png

Там разделяют shape (форму области) и data (данные в точках), именно это мне и нужно!

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от mclaudt

Да, как-то так. Почему-то мне и не приходило в голову, что надо разделить трафарет и данные (вот ведь...). В предыдущем своём посте я дал ссылку на что-то подобное, правда через R.

Вот по той же теме: http://stackoverflow.com/questions/1260965/developing-geographic-thematic-map...

Важна скорость отрисовки, точек со значениями от 1000 до 40000, рисование хотелось бы успевать делать за 3 секунды. Теперь хотя бы знаю, что надо гуглить по словую «shape». А я-то пытался «non-rectangular data».

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от mclaudt

> Полигоны, а не полигон, так как гнуплот и tikz вроде не умеют полигоны с прозрачными дырками.

Ты немного неправильно применяешь терминологию, как я понял.

Бывает многоугольник (последовательность точек, последняя точка равна первой точке). Ещё это можно назвать «кольцом», так в топологии называют.

Бывает полигон, полигон составлен из внешнего многоугольника и многоугольников-дырок.

Так что, gnuplot и tikz умеют ограничивать область многоугольниками, но не полигнами?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

картинка, то у тебя все равно в итоге в параллелепипеде получится, как не рисуй

почему нельзя полигоны на прямоугольном участке нарисовать, на нем же нарисовать сетку и построить функцию от всего прямоугольного участка как уже предложили заполнив дырки пустыми значениями?

alpha ★★★★★
()
Ответ на: комментарий от Obey-Kun

Чего-то я наверное перебрал сегодня немного с алкоголем.

Боюсь, что гнуплот тогда не подойдет. Для него критична прямоугольная сетка. Можно конечно переправить данные интерполяцией в точки сетки, но это отдельная задача.

aedeph
()
Ответ на: комментарий от alpha

> почему нельзя полигоны на прямоугольном участке нарисовать, на нем же нарисовать сетку и построить функцию от всего прямоугольного участка как уже предложили заполнив дырки пустыми значениями?

потому что непонятно, каким образом заполнять дырки пустыми значениями.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

>>Так что, gnuplot и tikz умеют ограничивать область многоугольниками, но не полигнами?

Не ограничивать, а рисовать умеют только полигоны. Трафарет с дыркой придется составлять из нескольких односвязных кусков и там и там.

mclaudt
()
Ответ на: комментарий от Obey-Kun

Ну если в такой терминологии, то да, многоугольниками.

Просто в tikz объект называется polygon.

mclaudt
()
Ответ на: комментарий от mclaudt

блин, я что щас подумал... нельзя полностью разделять shape и data.

например, у нас есть прямоугольник.

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

а теперь проделаем в этом прямоугольнике дырку в центре. теперь ведь совсем не линейный градиент должен получиться, если мыслить физически, тут всё сложнее теперь.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

как-то есть непонятно? уравнение/описание полигонов есть? вычисляешь, где точка - внутри или снаружи области, снаружи функция равна -inf, внутри - твоему значению

то есть грубо говоря тебе надо к своим данным приделать обертку которая экспортирует их в grid, делается при нормальном формате исходных данных не сложно

alpha ★★★★★
()
Ответ на: комментарий от Obey-Kun

>а теперь проделаем в этом прямоугольнике дырку в центре. теперь ведь совсем не линейный градиент должен получиться, если мыслить физически, тут всё сложнее теперь.

Это уже задача матфизики, а не отрисовки.

aedeph
()
Ответ на: комментарий от Obey-Kun

Сами данные температуры должны разумеется отвечать геометрии, но это вопрос расчета. Во многих пакетах есть возможность моделирования многосвязных областей.

mclaudt
()
Ответ на: комментарий от Obey-Kun

как по твоему рисуется график вообще? тем же гнуплотом?
и что такое - этот график который ты хочешь получить?

то, что у тебя сейчас нет представления в виде сетки не значит, что его нельзя сгенерировать на основе твоих данных

построить график = построить grid

alpha ★★★★★
()
Ответ на: комментарий от Obey-Kun

>Почему не отрисовки?

Потому что. У тебя задача - сделать красивую картинку или решить задачу по распределению температуры в образце по заданным экспериментальным данным? Первое подразумевает отсутствие таких проблем с градиентами, какие ты предложил. А если они есть, то до отрисовки данных очевидно недостаточно.

aedeph
()
Ответ на: комментарий от mclaudt

на этом скрине приведена область, составленная по сетке, да, но могут быть и области произвольные

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

она в любом случае теряется при построении графика, потому что график это растровая картинка, то есть конечный набор точек

может я не понимаю чего-то, ты в каком-нибудь векторном формате график хочешь что ли? без точек, но с прямыми и плоскостями?

alpha ★★★★★
()
Ответ на: комментарий от aedeph

> А если они есть, то до отрисовки данных очевидно недостаточно.

ты прав, так как данных много, то проблема сводится на нет

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от alpha

ну строят же всякие gnuplot'ы color maps в векторе...

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

>но ведь часть данных теряется при переводе изначальных данных в фиксированную сетку...

Во-первых не обязательно. А во-вторых каким образом, как ты думаешь, строились картинки, которые ты показывал как образцы?

aedeph
()
Ответ на: комментарий от aedeph

Таким образом, мне самому придётся апроксимировать данные в сетку :(. А ведь сначала надо понять, какая сетка нужна, тоже пока не понятно, как.

Вот в упомянутов в топике Golden Software Surfer всё просто — в одном файле данные (для тех точек, где снималось значение), в другом файле координаты ломанной, обрезающей область сверху (там из-за специфики софтины всегда прямоугольник, срезанный сверху).

Ну ладно, короче пока так понял лучше сделать так:

1) Найти либу/софтину, которая строила цветокарту/изолинии по заданным не сетчатым данным.

2) Вывод либы/софтины впихивать в нужный мне полигон.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

> 2) Вывод либы/софтины впихивать в нужный мне полигон.

То есть то же самое, что:

I) Взять белую область

II) Вырезать из этой области наш полигон

III) Наложить сиё на на вывод софтины

Obey-Kun ★★★★★
() автор топика

Всем спасибо за мозговой штурм.

Obey-Kun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.