2016-03-21 6 views
1

У меня есть набор угловых диапазонов, которые я хотел бы представить как полярный сюжет. Формат выглядит следующим образом:Gnuplot: Полярный график с переменными диапазонами

[Radius]\t[Range 1 lower] [Range 1 upper]\t[Range 2 lower] [Range 2 upper]... 

Типичная строка данных выглядит следующим образом:

1.181 0 0 31.8196 38.3883 141.612 148.18 180 180 211.82 218.388 321.612 328.18 

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

Диапазоны не перекрываются, но некоторые из них имеют тот же угол, что и нижний и верхний пределы (например, диапазон «0 0» в приведенном выше примере), что должно быть все еще видимым, как (как всегда) те одноточечные и едва заметные детали в расчетах оказались теми, которые наблюдались в эксперименте ...

На данный момент я сменил C-программу, которая выводит указанные диапазоны, чтобы дать мне облако точек с полярными координатами, которые Я рисую с точками, но я бы предпочел какой-то векторный сюжет с заполненными областями, поскольку это означало бы (намного) более низкий размер файла и позволяло бы масштабировать ...

Любая помощь была бы оценена, спасибо заранее,
Andreas

+0

Не могли бы вы дать обновление? Вы нашли решение gnuplot или отправились на другой планшет или использовали другой вывод данных? – Joce

+0

Спасибо за ваше предложение. Тем временем я занимался другим проектом, поэтому я решил сохранить решение «облако точек» на данный момент. Тем не менее, ваш ответ будет очень полезен, когда я вернусь к этому, из-за особой природы данных, которые я хочу построить, - диапазоны растут монотонно с радиусом, о чем я не думал, когда задавал вопрос. Это означает, что я могу (по крайней мере) уменьшить облако точек до списка диапазонов для определенного количества радиусов. Во всяком случае, ваша идея напрямую писать SVG также звучит довольно соблазнительно, поскольку у меня уже есть координаты вершин. – soulsource

ответ

0

Есть чисто gnuplot 4.4+ решения, но они будут сложными. Одна из причин заключается в том, что полярное построение файлов данных не выполняется с помощью полярной интерполяции, а линейная интерполяция (прямые линии между конечными точками). Я предпочел бы, чтобы программа C выводила команды gnuplot для прямой печати ваших данных, например.

set polar 
set angles degrees 
plot (t<38.3883&t>31.8196)?1.181:1/0 with filledcurves above r=0, \ 
    (t<... 

Я бы посоветовал лечить случаи 0-диапазона отдельно set arrow from 0,0 to r*cos(angle),r*sin(angle).

Я не уверен, что файл будет намного меньше, снова gnuplot сгенерирует полилинию, чтобы приблизить дугу окружности на r=1.181. Если вам нужен небольшой файл с фактическими дугами окружности, вы можете сгенерировать код svg непосредственно из вашего кода C.