最近做了实验,要绘图进行比较,网上百度搜索搞了很久,终于搞定了。写个文章记录一下。废话不多讲,咱们步入正题。
以下是以txt文档为例进行的绘图,如果用excel更加简单。道理都是一样的。
首先,做完实验后得到的一堆实验数据,如下:
在导入数据时,先要对test.txt文本里的数据进行一些简单的操作(excel里的数据本身就很规范不需要第一步,可直接到第二步),不然会影响matlab读取后的值。
1.规范化txt文本的数据
matlab读取数据是按一行一行导入表格进行读取的,所以test.txt文本里的任何无关的符号先去掉,上述文本先把 [ 和 ] 单独一行,里面的 , 必须去掉。
去掉 , 时可以在txt文本的 编辑 --> 替换 进行,如下图操作,将文本中的所有的 , 换成空格
更换完之后,文本应该是如下图所示的: (注意和原来的区别,这一步很重要)
2.MATLAB导入数据
点击matlab中的 主页--> 导入数据 ,如下图:
点击后,找到实验结果的test.txt,并打开,注意,文本里会显示很多行|列数据,如下图:
先选中要导入的某一行,之后,选择 数值矩阵 ---> 导入所选内容 --->导入数据
导入数据后注意工作区的变量变化:
注:要看一下导入的数据格式是否规范,如果数据格式有问题,后续的绘图会出错。具体双击某个变量,如上图的fedavgsacc。会出现变量的值,以下是格式有误的和格式正确的变量的对比:
剩余的其他变量如上述方法导入。
3.绘图
绘制多条曲线图时,可用以下代码读取刚刚导入的数据并绘图:
点击 编辑器 --> 运行 进行绘图:
运行结果如下:
程序代码:
y = BBOALOSS(1,:);
x = epoch(1,:);
plot(x,y);
hold on;
y1 = fedavgloss(1,:);
plot(x,y1)
关于一些需要别的设置,如横纵坐标的标签等等,代码如下:
y = BBOAACC(1,:); %读取工作空间中变量BBOAACC第1行所有列的值
x = epoch(1,:); %读取工作空间中变量epoch第1行所有列的值
plot(x,y); %绘图
axis([1 50 0 1]) %设置x轴的范围在1-50间,y轴的范围在0-1之间 (不需要时可删掉)
hold on; %同一个图像绘制多条曲线时必须有这一句
y1 = fedavgacc(1,:);
plot(x,y1) %绘图
xlabel('迭代次数'),ylabel('精确度')
legend('BBOA','FedAvg')
结果如下: