2012-03-12 4 views
0

У меня есть два набора точек: «test1.dat» и «test2.dat», они не имеют одинаковых значений X.Gnuplot: fillcurve между сглаженной кривой

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

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

ответ

1

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

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

Одна вещь, которую я заметил, когда тестирование на это является то, что вы должны убедиться, что у вас есть символ новой строки в конце test2.dat, иначе tail -r не будет работать правильно (tac вероятно, будет работать тоже, но он не устанавливается на моем Mac.Это работает с первым файлом данных и добавлением второго файла данных к первому в обратном порядке. (Я предполагаю, что первый и второй файлы данных уже упорядочены с использованием возрастающих значений X). Иными словами, как в отличие от gnuplot, данные возрастают в x, а затем спускаются по x. Поскольку мы использовали with filledcurves closed, gnuplot обрабатывает все точки как один многоугольник, а затем соединяет их. Что касается сглаживания данных, это еще один вопрос. по документации, gnuplo t предлагает несколько алгоритмов сглаживания, но их нужно будет использовать на ваших данных раньше времени. Ниже полностью тестировался, но, надеюсь, будет что-то похожее на то, что вы хотите (это будет также, вероятно, работают только в среде типа 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 сгенерировал файлы «сглаженный1» и «сглаженный2» и посмотрел, дает ли это какие-либо подсказки (например, есть ли дополнительные строки, которые нужно удалить?)

+0

Я получаю «непризнанную« плавную »опцию« –

+0

кажется, что это было потому, что «beizer» должен быть орфографирован «безье», –

1

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

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

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

+1

прокладочные данных fropm два различных файла можно: 'участок "test1.dat" с использованием 1, "test2.dat" с помощью 2' создает график, отражающий данные в каждом файле. – vaettchen

+1

Другая проблема заключается в том, что я хочу сначала получить две гладкие линии, заставляя данные шумно. Затем заливается кривая между гладкими линиями. – toby

+0

Я предпочитаю использовать внешние программы для обработки данных (например, сглаживание). Это может быть небольшой shell/python/script, который можно использовать аналогично тому, как это было в примере выше .. но это нехорошее решение. Для этого лучше использовать Gnuplot, встроенный в Python (Gnuplot.py), там у вас есть возможности Numpy/Scipy для обработки данных в 1 скрипте ... –

0

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

гладкая CSPLINE должна быть раньше с filledcurve

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

Смежные вопросы