Предполагая, что ваш файл данных имеет указанный выше формат, вы можете использовать textscan
для чтения данных:
fid = fopen('data.txt','rt');
C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1);
fclose(fid);
Первая ячейка C
будет содержать массив строк N на 3 (части даты), а вторая ячейка C
будет содержать вектор измерений данных размером N на 1. Вы можете создать номер даты для каждого измерения, сначала объединив 3 меньшие строки в одну строку даты, а затем используя datenum
:
t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C{1}(:,1)));
data = C{2};
Когда у вас есть вектор чисел дат t
, который будет соответствовать вашему вектору измерений data
, вы можете построить их:
plot(t,data,'*'); %# Plot the points as asterisks
Теперь вы можете изменить метки оси X, чтобы показать фактические даты. Одним из вариантов является использование функции datetick
, простое и элегантное решение, приведенное в ответ Стивена . Другой вариант — использовать функцию datestr
для создания метки самостоятельно, затем измените XTick
и XTickLabel
свойства текущих осей:
xpts = min(t):max(t); %# Make a full vector, filling in missing dates
set(gca,'XTick',xpts,'XTickLabel',datestr(xpts)); %# Set axes properties
ПРИМЕЧАНИЕ. Какой бы вариант вы ни выбрали для замены меток оси X строками даты, у вас могут возникнуть проблемы с наложением меток друг на друга, если деления расположены слишком близко друг к другу. Это можно исправить, уменьшив или переместив деления вдоль оси x (изменив XTick
) или путем настройки осей FontSize
. Если вы хотите повернуть метки, чтобы они подходили друг другу, вам придется стереть метки и создать новые повернутые текстовые объекты для них. Следующая заявка на обмен файлами MathWorks делает именно это:
person
gnovice
schedule
10.01.2010