Отображение на графике данных по времени (дата) ось

У меня есть данные как это:

22.10.1980. 100  
25.10.1980. 120  
26.10.1980.  12

(только намного больше из него, и для каждой даты, несколько независимых измерений справа).

Теперь, это, вероятно, тривиально, но я никогда не делал ничего как он в MATLAB, и имею проблемы при нахождении подобных примеров онлайн. Я должен отобразить данные на графике по оси дат времени/показа (ось X) со всеми датами внутри (так, 23. и 24. также..., для которого у меня нет измерений).

Как я могу заставить даты обнаруживаться на оси графика?

6
задан Adriaan 16 October 2019 в 14:39
поделиться

5 ответов

Похоже, что лучше всего использовать фишку .

Использование: datetick('x') или datetick('x', формат данных) с доступными форматами, как описано в документации .

16
ответ дан 8 December 2019 в 04:08
поделиться

Предполагая, что ваш файл данных имеет приведенный выше формат, вы можете использовать Textscan для чтения данных:

fid = fopen('data.txt','rt');
C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1);
fclose(fid);

первая ячейка C Содержит N-BY-3 клеточного массива строк (части даты), а вторая ячейка C будет содержать вектор N-BY-1 измерений данных. Вы можете создать номер даты для каждого измерения, сначала соединяя 3 меньших строки в одну строку даты, а затем с помощью функции TANENUM :

t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C{1}(:,1)));
data = C{2};

Как только у вас есть вектор номеров даты T Чтобы пойти с вашим вектором измерений данные , вы можете затем построить их:

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 File Exchange делает только что:

4
ответ дан 8 December 2019 в 04:08
поделиться

DateTick является хорошим вариантом, а также DateTick2, который можно найти здесь: MATLAB Central

dateTick2 позволяет панорамировать и масштабировать, с регулировками к меткам времени, в зависимости от того, как далеко вы увеличены [

Я не уверен в формате dd.mm.yyyy - вы можете использовать Regexp или strrep, чтобы изменить десятичные дроби, если необходимо, если необходимо.

2
ответ дан 8 December 2019 в 04:08
поделиться

Вы можете использовать TANENUM , чтобы преобразовать даты номера и построить данные как обычно. Позвольте сказать, что вы поместите ваши даты вектора в переменной под названием X. Теперь вы можете использовать

set(gca, 'xtick',x(1:10:end));
set(gca, 'xticklabel',datestr(x(1:10:end));

, чтобы установить галочки на оси X.

1
ответ дан 8 December 2019 в 04:08
поделиться

С DateNum вы можете преобразовать любую строку дату в числовой формат на основе символов формата даты (см. Справка DateStr).

Например, все это приводит к тому же численному представлению даты:

TANENUM ('15 / 05/2002 21:22 ',' dd / mm / yyyy hh: mm ');
datenum ('15 .05.2009 21:22 ',' dd.mm.yyyyy hh: mm ');
datenum ('21 -22 15.05.2009 ',' hh-mm dd.mm.yyyy ');
datenum ('21 -22 05 / 15.2009 ',' HH-MM MM / DD.YYYY ');
...

Приятная вещь заключается в том, что вы можете пройти массив клеток (вывод из Textscan) или массива CHAR непосредственно в DateNUM, и он выводится числовой массив даты.

3
ответ дан 8 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: