Matlab / Octave - разбор и построение строки даты в сравнении с целым числом - PullRequest
1 голос
/ 04 апреля 2020

У меня есть файл данных с первым столбцом в виде строки даты, а второй столбец является целым числом:

"2020/02/29" 1
"2020/03/03" 2
"2020/03/04" 6

Я хочу проанализировать этот файл и построить график на оси X, а целое число на ось Y. Моя последняя неудачная попытка:

file_name = "data.dat";
fid = fopen(file_name, 'rt');
raw_data = textscan(fid, "%s %d");
fclose(fid);

graphics_toolkit('gnuplot');
plot(raw_data(:, 1), raw_data(:, 2));

График пуст, данные не отображаются. Как я могу правильно построить такие данные? Кажется, вывод textscan немного громоздкий для построения графиков.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2020

вы не можете построить строку, вы должны сначала преобразовать строку даты в число даты. используйте cellfun, чтобы сделать это эффективно

x=cellfun(@(d) datenum(regexprep(d,'"',''),'yyyy/mm/dd'), raw_data{1});
y=raw_data{2};
plot(x,y)
0 голосов
/ 05 апреля 2020

Это мой способ сделать это.

pkg load io

Data   = csv2cell( 'data', ' ' );
Rows   = size( Data, 1 );

Datestrings = cell( Rows, 1 );
Datenums    = zeros( Rows, 1 );
Values      = zeros( Rows, 1 );

for i = 1 : Rows
  Datestrings{i} = Data{ i, 1 };
  Datenums(i)    = datenum( Data{ i, 1 }, 'yyyy/mm/dd' );
  Values(i)      = Data{ i, 2 };
end

plot( Datenums, Values );
set( gca, 
     'xtick', Datenums, 
     'xticklabel', Datestrings
);

Я бы тоже добавил опцию xticklabelrotation, но, увы, согласно руководству, xticklabelrotation еще не реализована в текущем октава (5.2.0), поэтому добавление ничего не дает.

...