LINUX.ORG.RU

Gnulot: рисование линий уровня с точками с фиксированными координатами

 ,


0

1

Добрый день! Имеется следующая проблема. Мне необходимо построить график линий уровня для двух функций и нарисовать две точки с фиксированными координатами (0; +/- 20) (всё на одном графике). Для построения линий уровня я использовал следующий код:

unset surface
set contour
set view map
set cntrparam levels incremental -59, 0.6, 59
unset key
unset clabel

F = 0.1
kappa = 1

set yrange [0:30]
set xrange [-30:30]


splot (-F**2*x**3/24.0+F**2*x*y**2/8.0-kappa**2*x/2.0) lt -1 w l, (-F**2*x**2*y/8.0 + F**2*y**3/24.0 - kappa**2*y/2.0) lt rgb "red" w l, 'xyz.dat' u 1:2:3 w p pt 7 ps 2 lt -1

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

set contour
set view map
set cntrparam levels incremental -59, 0.6, 59
unset key
unset clabel

F = 0.1
kappa = 1

set yrange [0:30]
set xrange [-30:30]


splot (-F**2*x**3/24.0+F**2*x*y**2/8.0-kappa**2*x/2.0) lt -1 w l, (-F**2*x**2*y/8.0 + F**2*y**3/24.0 - kappa**2*y/2.0) lt rgb "red" w l, 'xyz.dat' u 1:2:3 w p pt 7 ps 2 lt -1

Результат можно увидеть здесь тык. Как можно видеть, точки уже имеются, но появляются некоторые линии, параллельные осям координат. Можно ли как-то убрать эти линии, но оставить точки?


Можно разделить рисование контуров и не-контуров при помощи set table $datablock (см. help datablock):

unset surface
set contour
set view map
set cntrparam levels incremental -59, 0.6, 59
unset key
unset clabel

F = 0.1
kappa = 1

set yrange [0:30]
set xrange [-30:30]

set table $cntr1
splot (-F**2*x**3/24.0+F**2*x*y**2/8.0-kappa**2*x/2.0) lt -1 w l
unset table

set table $cntr2
splot (-F**2*x**2*y/8.0 + F**2*y**3/24.0 - kappa**2*y/2.0)
unset table

plot $cntr1 lt rgb "red" w l, $cntr2 w l, '-' u 1:2 w p pt 7 ps 2 lt -1
0 -20
0 +20
e

(Вторую точку не видно из-за yrange.)

anonymous
()

есть ещё прикольная штука MathGL http://mathgl.sourceforge.net/doc_ru/Main.html

тоже строит графики, тоже можно инструкциями.. но это «С» в основном и есть координатные привязки (API трансляции туда-сюда). И конечно быстрее чем через gnuplot - массивы и матрицы гонятся без файлов и CSV

Если чего не выходит его методами, то можно сверху дорисовать через например cairo.

полезная вещь, обратите внимание

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