Gnuplot: заполненная кривая между сглаженной кривой - PullRequest
0 голосов
/ 12 марта 2012

У меня есть два набора точек: «test1.dat» и «test2.dat», они не имеют одинаковые значения X.

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

Я прочитал учебник и не могу найти ответ.

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Отвлекаясь от ответа Рафаэля Рота и просматривая документацию по gnuplot, вы, вероятно, сможете достичь этого с помощью небольшой магии оболочки для наборов данных, которые также не разделяют значения X.

plot '< tail -r test2.dat | cat test1.dat -' using 1:2 with filledcurves closed

OneПри тестировании я заметил, что вы должны убедиться, что в конце test2.dat у вас есть символ новой строки, иначе tail -r не будет работать правильно (tac, вероятно, тоже будет работать, но это не так.установлен на моем Mac. Это работает, беря первый файл данных и добавляя второй файл данных к первому в обратном порядке (я предполагаю, что первый и второй файлы данных уже упорядочены с использованием возрастающих значений X). Другими словами, насколько gnuplot являетсяЧто касается данных, то данные возрастают по x, а затем убывают по x. Поскольку мы использовали with filledcurves closed, gnuplot обрабатывает все точки как один многоугольник, а затем соединяет их. Что касается сглаживания данных, то это совершенно другой вопрос. Просто взглянем надокументация, gnuplot предлагает несколько алгоритмов сглаживания, но их нужно будет использоватьна ваши данные раньше времени.Следующее полностью не проверено, но, надеюсь, будет чем-то похожим на то, что вы хотите (оно также, вероятно, будет работать только в среде типа Unix) ...

set table 'smoothed1'
plot 'test1.dat' using 1:2 smooth beizer  #beizer is just an example see "help plot datafile smooth" for more options
unset table

set table 'smoothed2'
plot 'test2.dat' using 1:2 smooth beizer
unset table

plot '< tail -r smoothed2 | cat smoothed1 -' using 1:2 with filledcurves closed

Если это не сработает, возьмитепосмотрите на сгенерированные gnuplot файлы "smoothed1" и "smoothed2" и посмотрите, дает ли это какие-либо подсказки (например, есть ли дополнительные строки, которые следует удалить?)

1 голос
/ 12 марта 2012

Насколько я знаю, Gnuplot не может составлять графики, используя данные в 2 разных файлах. В таких случаях я вызываю BASH-программу, такую ​​как «paste», чтобы объединить два файла. Я предполагаю, что эти два файла содержат данные в формате «X Y», и они совместно используют общую X-сетку (количество точек данных также должно быть равным)

plot '<paste test1.dat test2.dat' u 1:2:4 w filledcurve

PS: Если вы не используете Linux, я не знаю, как это сделать ....

0 голосов
/ 31 марта 2016

Это работает для меня.Сначала залейте немного цветом между верхней сглаженной линией и осью x, затем залейте белым цветом между нижней линией и осью x, и, наконец, нанесите две сглаженные линии.

гладкая сплайн должна быть раньше с заполненной кривой

plot "test1.dat" using ($1):($2) notitle smooth cspline with filledcurve x1 lt rgb "#FFAAAA",\ "test2.dat" using ($1):($2) notitle smooth cspline with filledcurve x1 lt rgb "#FFFFFF",\ "test1.dat" using ($1):($2) notitle w l lw 2 lt 1 lc 0 smooth cspline,\ "test2.dat" using ($1):($2) notitle w l lw 2 lt 1 lc 1 smooth cspline

...