2015-06-27 5 views
1

Я получаю доступ к данным из разных файлов, используя файл .plt, который я написал. Существенным является только конкретный домен каждого набора данных. Я пытаюсь построить только конкретный домен каждого набора данных на один граф.Gnuplot, ограничивающий область нескольких файлов данных, нанесенных на один график

Данные в каждом домене соответствуют пику. Я хочу построить каждый из этих пиков, а затем установить экспоненциальную функцию распада на вершины.

Вот код в моем файле участка:

set xlabel "Time (ms)" 
set ylabel "voltage" 

set title "T1 time for Isopropyl Alcohol" 
dir='C:\Users\Daniel\Desktop\College\modern lab\gp501-win64-mingw\gnuplot\bin\data files\isoproply_alc_t1\' 
unset key 
set style data linespoints 
x(v, left, right) = (v >= left && v <= right ? v : 1/0) 
plot dir.'nmr-t1-isopropyl-dt10' using (x($0*0.01, 3, 7)):1, \ 
    dir.'nmr-t1-isopropyl-dt50' using (x($0*0.01, 20, 40)):1, \ 
    dir.'nmr-t1-isopropyl-dt100' using (x($0*0.01, 40, 60)):1, \ 
    dir.'nmr-t1-isopropyl-dt150' using (x($0*0.01, 70, 80)):1, \ 
    dir.'nmr-t1-isopropyl-dt200' using (x($0*0.01, 99, 101)):1, \ 
    dir.'nmr-t1-isopropyl-dt230' using (x($0*0.01, 114, 116)):1, \ 
    dir.'nmr-t1-isopropyl-dt250' using (x($0*0.01, 124, 126)):1, \ 
    dir.'nmr-t1-isopropyl-dt270' using (x($0*0.01, 134, 136)):1, \ 
    dir.'nmr-t1-isopropyl-dt290' using (x($0*0.01, 144, 146)):1, \ 
    dir.'nmr-t1-isopropyl-dt300' using (x($0*0.01, 149, 151)):1, \ 
    dir.'nmr-t1-isopropyl-dt320' using (x($0*0.01, 159, 161)):1, \ 
    dir.'nmr-t1-isopropyl-dt340' using (x($0*0.01, 169, 171)):1, \ 
    dir.'nmr-t1-isopropyl-dt360' using (x($0*0.01, 178, 183)):1, \ 
    dir.'nmr-t1-isopropyl-dt400' using (x($0*0.01, 198, 201)):1, \ 
    dir.'nmr-t1-isopropyl-dt430' using (x($0*0.01, 213, 217)):1, \ 
    dir.'nmr-t1-isopropyl-dt470' using (x($0*0.01, 233, 236)):1, \ 
    dir.'nmr-t1-isopropyl-dt580' using (x($0*0.01, 289, 291)):1, \ 
    dir.'nmr-t1-isopropyl-dt620' using (x($0*0.01, 309, 311)):1, \ 
    dir.'nmr-t1-isopropyl-dt650' using (x($0*0.01, 324, 326)):1, \ 
    dir.'nmr-t1-isopropyl-dt700' using (x($0*0.01, 348, 352)):1, \ 
    dir.'nmr-t1-isopropyl-dt750' using (x($0*0.01, 374, 376)):1, \ 
    dir.'nmr-t1-isopropyl-dt800' using (x($0*0.01, 399, 401)):1, \ 
    dir.'nmr-t1-isopropyl-dt850' using (x($0*0.01, 424, 426)):1, \ 
    dir.'nmr-t1-isopropyl-dt900.2' using (x($0*0.01, 449.5, 451)):1 

Это дает правильный домен.

Теперь я хочу перевернуть точки данных за некоторое произвольное значение x по оси y. Я хочу сделать их отрицательными.

Я пробовал команду flipy, но это не помогло.

ответ

1

Gnuplot не поддерживает указание отдельного диапазона для каждого файла данных в одной команде plot. Это работает только для функций.

Вы должны фильтровать данные в using заявления, давая все точки за пределами разыскиваемого диапазона значений 1/0, который аннулирует соответствующий пункт:

left = 3 
right = 7 
plot 'file.dat' using ($0 > left && $0 < right ? $0 : 1/0):1 

Чтобы сделать команду более читаем, вы можете также поставить фильтрация в функции. Есть также некоторые другие возможности для улучшения читаемости коды:

  • Определить переменную dir, которая содержит путь к файлам. Имя файла данных затем объединяются с этим переменным оператором .:

    dir = 'C:\my path\' 
    plot dir.'file.dat' ... 
    
  • Пропустив ключ (легенду) может быть пропущен во всем мире с unset key

  • Вы можете установить стиль графика для файлов данных на глобальном уровне с set style data linespoints

Так что ваш сценарий может выглядеть

set xlabel "Time (ms)" 
set ylabel "voltage" 
set format y "%s" 

set title "T1 time for Isopropyl Alcohol" 
dir='C:\Users\Daniel\Desktop\College\modern lab\gp501-win64-mingw\gnuplot\bin\data files\isoproply_alc_t1\' 
unset key 
set style data linespoints 
x(v, left, right) = (v >= left && v <= right ? v : 1/0 
plot dir.'nmr-t1-isopropyl-dt10' using (x($0*0.01, 3, 7)):1, \ 
    dir.'nmr-t1-isopropyl-dt50' using (x($0*0.01, 20, 40)):1, \ 
    dir.'nmr-t1-isopropyl-dt100' using (x($0*0.01, 40, 60)):1, \ 
    dir.'nmr-t1-isopropyl-dt150' using (x($0*0.01, 70, 80)):1 
+0

Это сработало очень хорошо! У меня есть четкий сюжет со всеми моими вершинами. С чего начать, чтобы я мог соответствовать экспоненциальной функции распада, чтобы соответствовать этим пикам? (Он должен выглядеть как конверт, охватывающий все точки данных. –

+0

Вы должны поместить все точки кривой вашего затухания в один файл (или встроенный набор данных), чтобы использовать «fit». Однострочный: 'set table $ T1data; replot ; unset table; fit I-2 * I * exp (-x/T1) $ T1data us 1: 2 noerr через I, T1' (я предполагал восстановление инверсии ;-)) Возможно, вы захотите настроить левый и правый пределы каждый echo, поэтому 'x()' возвращает только одно значение. – Karl

+0

это было восстановление инверсии! Благодарю. У меня все еще есть проблемы с работой с gnuplot. Я могу вернуться к математике! –

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