本篇文章用来记录本人在书写电离层程序时候的想法和设计。
在设计画图函数时,如果曲线的颜色类别较多,又想显示不同类别的数据表示,可以尝试直接用数字代表颜色,省略指定曲线颜色的步骤,这里以GPS数据为例,1~7列的数据分别为观测时间(小时),卫星PRN号,纬度,经度,VTEC值,历元编号。
数据量较大,共有2万多行数据
现在第一步,表示不同时间下的VTEC值,使用plot函数即可,第一个输入参数是时间,表示横坐标;第二个输入参数 是VTEC值,表示纵坐标。
plot(data_GPS(:,1),data_GPS(:,5),'.')
显示结果如下
这里图像显示较乱,是因为数据量大,因为卫星的PRN号最大值是32,说明这里有32颗卫星的数据,现在进行第二步,是否可以用不同颜色标记不同卫星号的数据,从而使得显示稍微好看一点呢?
这里给出了两种画图方法
第一种,使用scatter画图
scatter生成散点图,算法简单,函数简单,直接在颜色对应的输入部分输入数字即可。MATLAB会自动识别颜色值那一栏的数据,自动生成颜色,x输入栏有2万个数据表示横坐标,y输入栏有2万个数据表示纵坐标,color输入栏也有2万个数据表示颜色类型
scatter(data_GPS(:,1),data_GPS(:,5),10,data_GPS(:,2),'filled')
结果显示如下
但是scatter函数的硬伤是不好对不同颜色的点显示不同图例,如果想显示图例的话,采用下面的办法
第二种,使用plot函数对对应颜色块儿进行画图,整理到一起
type=tabulate(data_GPS(:,2));
type=type(logical(type(:,2)),:);
PRNtype=type(:,1);%取PRN号
figure
hold on
endi=0;
for i=1:length(PRNtype)%计数卫星个数
endi=endi+type(i,2);
starti=1+endi-type(i,2);
plot(data_GPS(starti:endi,1),data_GPS(starti:endi,5),'.')
end
PRNname=num2str(PRNtype);
legend(PRNname)
这里解释一下第二行代码的用意,如果在矩阵变量名后头括号里输入逻辑变量(1为真,0为假),可以限制矩阵输出的行数,说白话就是删除一行的值,为什么要删除某一行的值呢?解释如下:
当使用tabulate函数统计卫星PRN号的个数时,发现PRN号为4号的数据是空的,但是type矩阵也显示出来了,因此想要删除这一行没用的统计,所以先使用logical函数将type矩阵第二列判断一下是不是为零,为零就赋值为“假”,因此就能达到删除行的作用。
最后画图显示如下,既有图像又有图例