我有两组数据:一组每天120个数据点(10分钟记录间隔)和一组每天96个数据点(15分钟记录间隔) .
我已经有了一个功能性的matlab脚本来绘制24小时内具有相同点数的两个数据文件 . 问题是这个脚本依赖于每天标记x轴的点数 .
代码的主要部分如下:
data1=importdata(a);
data2=importdata(b);
data=data1.data(:,1);
Data=data2.data(:,1);
text=data1.textdata;
for i=1:length(data(:,1))
dates(i,:)=[str2num(text{i,1}(1:2)),str2num(text{i,1}(4:5)),str2num(text{i,1}(7:8))];
dates2(i,:)=text{i,1};
time(i,:)=[str2num(text{i,2}(1:2)),str2num(text{i,2}(4:5)),str2num(text{i,2}(7:8))];
time2(i,:)=text{i,2};
end
pH=data(:,1);
pH2=Data(:,1);
maxpH=max(data(:,1));
minpH=min(data(:,1));
h=figure;
set(h,'Position', [1 1 1200 565]);
subplot('Position',[0.08 0.09 0.87 0.8]);
hold on
set(gcf,'PaperPositionMode','auto');
plot(1:length(data(:,1)),acidosisthreshold*ones(1,length(data(:,1))),'r','linewidth',2);
plot(pH,'linewidth',1.5);
plot(pH2,'m','linewidth',1.5);
set(gca, 'XTick',1:pointsperday:length(dates), 'XTickLabel',dates2(1:pointsperday:length(dates(:,1)),:),'xlim',[0 length(dates)]);
xlabel('Time', 'FontSize',16);
ylabel('pH', 'FontSize',16);
title(['A plot of the pH over ',num2str(c),' days; group']);
如您所见,pointsperday变量是在x轴上设置比例的原因 . 我的问题是:我如何调整这个以适用于具有不同pointperday值的两个文件?
编辑:从csv文档读入数据 . 示例行将是:
15/01/2014 , 00:00:00 , 6.53 , -330 , 39.7 , 2.97
对应于:
DD/MM/YYYY , HH:MM:SS , pH , [other values are irrelevant
]
2 回答
如果不了解数据格式的详细信息,很难给出明确的建议 . 我在这种情况下通常做的是读取日期/时间字符串并使用
datenum()
转换为Matlab的内部表示 . 这通常对字符串格式非常聪明,如果需要,可以给它一个显式格式字符串 .然后可以使用
datenum
格式数据将数据绘制为x
值 . 这与每个系列中各点之间的时间间隔无关 . 可以使用datetick()
生成x刻度 .或者,您可以通过查找最早的数据点并从所有其他数据中减去
datenum
并将结果用作x
值来工作 . 这为您提供了自数据开始以来的天数 .Edit:
如果你将前两个字段连接起来,给出一个像
15/01/201400:03:15
这样的输入字符串,那么你可以通过以下方式获得datenum
:您可以使用以下代码,是的,它有点脏,但有效(基于我可以从您的输入信息中假设的输入数据) -
如您所见,我们需要标准化(即使pH和pH2的大小相同),并且中间数据必须用NaN填充 .
此外,您可以看到绘图将使用点与默认行相比 . 如果你必须使用带有线条的情节,可以查看这个code .
如果以上代码适合您,请告诉我们!