2013-11-08 2 views
0

Я пытаюсь построить почасовые данные. Проблема в том, что дата находится в одном столбце массива ячеек, а час - в следующем столбце. Как я могу построить данные с осью х, учитывая дату и час? Я думаю, что лучший способ состоял бы в том, чтобы объединить два столбца и использовать их как мой x.MATLAB Объединение даты и часа из двух столбцов ячейки

% Plot data for the month of June, 2007 

    % Uses the FileExchange file addaxes.m to plot 3 different y axes to 
    % account for the different units 
clear 
clc 

load WI_200706_Pollution.mat; 
%% Order of Columns 
% 5. State Code 
% 6. County Code 
% 7. Site Num  
% 13. Date GMT  
% 14. 24 Hour GMT 
% 17. Sample Measurement 

%% Sort data by State Code, County Code, Site Code, Date GMT, Hour GMT 
% PM25 
PM25_State = sortrows(PM25,5); 
PM25_County = sortrows(PM25_State,6); 
PM25_Site = sortrows(PM25_County,7); 
PM25_Date = sortrows(PM25_Site,13); 
PM25_Hour = sortrows(PM25_Date, 14); 

% SO2 
SO2_State = sortrows(SO2,5); 
SO2_County = sortrows(SO2_State,6); 
SO2_Site = sortrows(SO2_County,7); 
SO2_Date = sortrows(SO2_Site,13); 
SO2_Hour = sortrows(SO2_Date, 14); 

% Pull out data 
PM25_data = PM25_Hour(:,17); % ug/L3 
NO2_data = NO2_Hour(:,17); % ppb 
CO_data = CO_Hour(:,17); % ppm 
O3_data = O3_Hour(:,17); % ppm 
SO2_data = SO2_Hour(:,17); % ppb 

clearvars -except -regexp _data _Hour % Clear all variables except the sorted _Hour files and the _data files 

%%%%%%% 
%% Plot PM2.5 daily data 
% Axis 
DateString = PM25_Hour(2:end,11); % Pull out dates 
formatIn = 'yyyy-mm-dd'; 
x1 = datenum(DateString,formatIn); % Convert to datnum 
y1 = PM25_data(2:end); % Plot data 

%% Plot SO2 hourly data 
% Axis 
date = datenum(SO2_Hour(2:end, 11)); 
hour = datenum(SO2_Hour(2:end, 12)); 
DateString = datenum(strcat(date, hour), 'yyyy-mm-ddHH:MM'); % Pull out dates 
x5 = datenum(DateString); % Convert to datnum 
y5 = SO2_data(2:end); % Plot data 

% Convert cells to double 
y1 = str2double(y1); 
y5 = str2double(y5); 

% Plot 
h = figure; % To make the figure not show up, use 'h = figure('visible', 'off')'; 
plot(x5, y5, 'k', 'LineWidth', 1, 'Marker', 'o'); % Black line of width 2. Circular marker of color blue 
addaxis(x1, y1); 

addaxislabel(1,'ppb'); 
addaxislabel(2,'ug/CL'); 

grid on; % Turn on grid for plot 
legend('PM2.5 (ug/CL', 'SO2 (ppb)'); 

Код был сокращен, чтобы включать только две из пяти переменных, которые я рассматриваю. PM2.5 - это ежедневные данные, поэтому нет проблем с этим. С SO2 я пытаюсь совместить дату и время в разделе «Plot SO2 hourly data». Прямо сейчас, я получаю эту ошибку:

Error using datenum 
DATENUM failed. 

Caused by: 
    Error using dtstr2dtnummx 
    Failed on converting date string to 
    date number. 

Если я не совместить дату и время, я получаю кучу точек идут вверх по вертикали на каждый день. Как я могу по-прежнему держать ось x в день для PM2.5, но разрешить SO2 распространяться в течение дня?

ответ

1

Ваш формат даты является недействительным, поскольку 2000-12-111:00 может быть 2000-12-11 на 1:00 или 2000-12-1 на 11:00. Используйте разделитель.

Если это не ошибка: на что падает входное количество данных? Попробуйте dbstop if error, затем он остановится на правильной линии.


Update это исправляет ошибку, нет никаких причин, чтобы преобразовать дату и час дважды:

date = SO2_Hour(2:end, 11); 
hour = SO2_Hour(2:end, 12); 

DateString = datenum(strcat(date,'-', hour), 'yyyy-mm-dd-HH:MM'); % Pull out dates 
+0

Как использовать разделитель? Просто добавление «-» ничего не меняет. Ошибка возникает сразу после 'DateString = datenum (strcat ...' – shizishan

+0

Что такое ввод данных? – Daniel

+0

Вот ссылка на ссылку на мой скрипт (это более длинный скрипт, но такая же идея - у меня есть только несколько переменных в середине где я еще не пытался совместить дату и время) и файл .mat с данными. https://www.dropbox.com/sh/hpjelnbzf9m069h/_wef_rKA0W – shizishan

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