最近做了实验,要绘图进行比较,网上百度搜索搞了很久,终于搞定了。写个文章记录一下。废话不多讲,咱们步入正题。
以下是以txt文档为例进行的绘图,如果用excel更加简单。道理都是一样的。
首先,做完实验后得到的一堆实验数据,如下:
![](https://img-blog.csdnimg.cn/20211010164648721.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
在导入数据时,先要对test.txt文本里的数据进行一些简单的操作(excel里的数据本身就很规范不需要第一步,可直接到第二步),不然会影响matlab读取后的值。
1.规范化txt文本的数据
matlab读取数据是按一行一行导入表格进行读取的,所以test.txt文本里的任何无关的符号先去掉,上述文本先把 [ 和 ] 单独一行,里面的 , 必须去掉。
去掉 , 时可以在txt文本的 编辑 --> 替换 进行,如下图操作,将文本中的所有的 , 换成空格
![](https://img-blog.csdnimg.cn/20211010165231218.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_10,color_FFFFFF,t_70,g_se,x_16)
更换完之后,文本应该是如下图所示的: (注意和原来的区别,这一步很重要)
![](https://img-blog.csdnimg.cn/2021101016532875.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
2.MATLAB导入数据
点击matlab中的 主页--> 导入数据 ,如下图:
![](https://img-blog.csdnimg.cn/2021101016562991.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
点击后,找到实验结果的test.txt,并打开,注意,文本里会显示很多行|列数据,如下图:
![](https://img-blog.csdnimg.cn/20211010165811846.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
先选中要导入的某一行,之后,选择 数值矩阵 ---> 导入所选内容 --->导入数据
![](https://img-blog.csdnimg.cn/20211010180711909.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
导入数据后注意工作区的变量变化:
![](https://img-blog.csdnimg.cn/20211010181151384.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
注:要看一下导入的数据格式是否规范,如果数据格式有问题,后续的绘图会出错。具体双击某个变量,如上图的fedavgsacc。会出现变量的值,以下是格式有误的和格式正确的变量的对比:
![](https://img-blog.csdnimg.cn/20211010183046962.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
剩余的其他变量如上述方法导入。
3.绘图
绘制多条曲线图时,可用以下代码读取刚刚导入的数据并绘图:
![](https://img-blog.csdnimg.cn/20211010183211269.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
点击 编辑器 --> 运行 进行绘图:
![](https://img-blog.csdnimg.cn/20211010183327205.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_20,color_FFFFFF,t_70,g_se,x_16)
运行结果如下:
![](https://img-blog.csdnimg.cn/20211010183349245.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_15,color_FFFFFF,t_70,g_se,x_16)
程序代码:
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')
结果如下:
![](https://img-blog.csdnimg.cn/20211010191040555.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKJ552h5Lit55qE5Li76KeS,size_15,color_FFFFFF,t_70,g_se,x_16)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)