GnuPlot :: Построение 3D-графики в нетрадиционном формате - PullRequest
1 голос
/ 20 октября 2019

Я хотел бы подготовить файл сценария для построения трехмерного графика некоторых результатов кинетической спектроскопии. В эксперименте спектр поглощения раствора измеряется последовательно при увеличении времени от t 0 до t f с постоянным увеличением времени Δt. График покажет изменение поглощения (Z) в зависимости от длины волны и времени.

Данные записываются с использованием спектрометра UV-VIS и сохраняются в виде текстового файла CSV.

Файл содержит таблицу, в которой в первом столбце указаны длины волн спектров. После этого для каждого измеренного спектра добавляется столбец, а количество столбцов зависит от общего времени и временного интервала между измерениями. Время для каждого спектра отображается в строке заголовков.

Интересно, могут ли данные быть нанесены непосредственно с минимальным предварительным форматированием и без необходимости перезаписи данных в более универсальный формат XYZ.

Структура файла данных выглядит примерно так

Заголовок;эспектроскопия UV-VisКомментарий;Свидание;23/10/2018 16:41:12Оператор;ЛабораториосИмя системы;НеопределенныйДлина волны (нм);0 мин;0,1 мин;0,2 мин;0,3 мин;... 28,5 мин400,5551;1,491613E-03;1,810312E-03;2,01891E-03;... 4,755786E-03... ... ... ... ... ... 799,2119;-5,509266E-04;3,26314E-04;-4,319865E-04;... -5,087912E-04(EOF)

Копия образца данных включена в этот файл kinetic_spectroscopy.csv .

Спасибо.

1 Ответ

3 голосов
/ 21 октября 2019

Ваши данные находятся в приемлемой форме для gnuplot, но убедить программу представить ее как одну линию на длину волны, а не как поверхность с сеткой, сложнее. Сначала давайте установим, что файл можно прочитать и построить. Следующие команды должны прочитать координаты x / y (x = первая строка, y = первый столбец) и значения z для построения поверхности.

DATA = 'espectros cinetica.csv'
set datafile separator ';'  # csv file with semicolon

                            # Your data uses , as a decimal point.
set decimal locale          # The program can handle this if your locale is correct.
show decimal                # confirm this by inspecting the output from "show".

set title DATA
set ylabel "Wavelength"
set xlabel "Time (min)"
set xyplane 0
set style data lines

splot DATA matrix nonuniform using 1:2:3 lc palette

enter image description here

Это на самом деле выглядит хорошо с вашими данными. Для меньшего количества сканов это, вероятно, не то, что вы хотели бы. Чтобы построить отдельные линии, по одной на скан, мы могли бы разбить это на последовательность линейных графиков, а не на один поверхностный график:

 DATA = 'espectros cinetica.csv'
 set datafile separator ";"
 set decimal locale
 unset key
 set title DATA
 set style data lines
 set ylabel "Wavelength"
 set xlabel "Time (min)"
 set xtics offset 0,-1      # move labels away from axis

 splot for [row=0:*] DATA matrix nonuniform every :::row::row using 1:2:3

Это то, что я получаю для первых 100 строк вашегофайл данных. Данные строки окрашиваются последовательно по типам линий gnuplot. Возможны другие схемы окраски. enter image description here

...