在论文中,可视化结果往往很重要,毕竟文字太抽象,需要图片向审稿人直观的展现出我们的结果。我也写了俩篇论文和一篇专利的申请,其中也有一些画图的程序,因此记录,防止以后忘了。由于篇幅原因,文章就不贴代码,本文中所有的程序代码都在我的github

画图程序往往有很多版,毕竟论文写完了,导师会先看你图画的怎么样,你觉得画的挺好的,导师觉得不行,那你就得回去重新画结果图,这中间的程序会修改成很多版本,我会从最终版和中间被抛弃的一些版本看看结果可视化。先看最终版,如果你对后面抛弃的其他版本也感兴趣的话,也可以往下看,最后会看看专利中画的图。

最终版

最终版论文中,需要画图的有

  1. 具有明显特征的天文数据,因为我是天文数据处理方向,所以会有天文数据的光谱图。
  2. 论文中算法的分析,因为算法会将数据按照信噪比分开,因此对每堆数据都要分析,之后还要分析整体的性能。
  3. 与其他算法的对比,分别是从召回、精确和时间来分析的

天文数据

第一,画具有明显特征的天文数据,天文数据是高维,一般的都会有三千多维,一种就是算法中使用了很多发射线,需要画出全部的三千多维,这种会要求标出数据中的发射线信息,写法在文件drawSpectralChinesePaper.py中,画出的如图1所示。

还有一种就是只需要部分发射线,因此并不需要在一张图中画出所有的发射线,只需要选取一些具有明显特征的波长段画出来,如果选取的特征相隔很远,我们就需要使用子图来画,写法在文件drawSpectralEnglishPaper.py,画出的如图2所示。

算法性能分析

第二,就是算法性能分析程序,分析一般都是分析算法中参数的变化,算法的精确率和召回率,我分为部分数据的召回和精确,还有就是整体数据的召回和精确。先来看算法中权重的改变,画出的图3如下所示,权重有俩种,一种是绿色的实线,一种是紫色的虚线,区分也较为明显,这种色调较为明快,写法在文件drawAlgorithmWeight.py

再看部分数据的召回和整体,色调较暗,并且也需要良好的辨识度,横纵坐标都需要标识清楚,并且字体要清晰可见,召回率图写法在文件picAllRecall.py,召回率画出的如图4所示。

精确率图在文件picAllPrecision.py,精确率画出的如图5所示

还有一种就是算法中在多个数据集中的精确率可视化,如图6所示,虚线代表该数据集中全部数据的精确率,绿色、蓝色和橙色柱形代表数据集中部分数据的精确率,代码在文件drawPrecisionInFiveDataEnglishPaper.py

对比算法分析

第三,就是对比实现分析,一般论文这里都非常重要,体现出论文算法的优势,我分析的一般只是召回率、精确率和时间,下面我们先分析精确率和召回率,之后再来看时间。精确率和召回率如果可以放在一起的话,那么就可以放在一起来展示,如下图7所示,一共对比了六种算法,论文算法WEDA要加粗表示,令别人一眼就看出论文算法的性能位置,图中还有虚线和实线来表示召回和精确,图中因为没有位置了,所以只能在论文中对图中的实线和虚线进行说明,代码在文件comparedPrecisionAndRecallEnglishPaper.py

如果你对比的太多了,精确率和召回率放在一张图的话,就会显得很乱,让人看不清,那么就需要重新写一个来画图,还有就是如果期刊要求图中不能出现彩色来区别类别的话,就需要其他的方式来区分,如图8所示,论文算法是FDCC,能让人清晰的看到,并且每种算法都能被区分开,用的就是不同的柱形,代码在文件comparedRecallChinesePaper.py

下面就是对比时间,我们依然会有俩种画法,一种就是彩色区分,还有一种就是形状区分,其实和上面的颜色都是一样,第一种就是彩色,如图9所示,代码就是文件comparedTimeEnglishColo.py

还有一种就是形状区分,自己在画图的时候需要注意,该如何有效并且清晰的区分出所有的算法,如图10所示,图中采用的就是虚线和实线,代码就是文件comparedTimeChinesePaper.py

被抛弃的版本

抛弃的版本,我们依旧从上面的三个角度来说

天文数据

第一,画有特征的天文数据,如图11所示,这在图中有一个小框,来表示另一条比较偏远的发射线,但是这样做的画,很容易让人误解它是图中哪段数据的放大,因此后来被抛弃不用了,代码在文件abandonDrawSpectral.py

算法性能分析

第二,算法性能分析,主要就是算法中的参数、召回和精确,并且召回和精确是分整体和部分的。先来看参数,分析其性能和参数的联系,其中也有后来被抛弃不分析的参数,就是fitness的大小,如图12所示,我一直觉得这图很清晰简洁,很喜欢这图的颜色分布。代码在文件abandonFitnessAlgorithm.py

再来看部分数据的精确率,这个分好多版本,我们来看俩个版本的,先看图13,首先这张图是有底纹的,后来觉得不好看,就把底纹去了,并且这是折线图,但是图中的点太多了,密密麻麻的,不美观,并且图示例也比较大,影响整体的观感,后来就被抛弃了,代码在文件abandonRecall.py

后来就改了上面的缺点,变成了图14,这张图个人感觉没啥缺点,不要看其中表示的数据变了,那个没关系,主要看图,给人的感官,个人感觉挺好,可能就是颜色搭配不好,应该使用暗色调更好一点,后来就被抛弃了。代码在文件middleAbandonPicAllRecall.py

整体数据的精确率和召回率,如图15,这张图如今看来也是很不好看的,缺点很多,线条画的不美观,点过多,数据放的太多,让人看不清自己想要看的,显得很杂乱,这样的画,得分开画最好,代码在文件abandonAllPrecisionAndRecall.py

后来分开,但是还是要看一下整体得精确率是如何变化,分析一下算法在数量多少的时候会达到稳定的状态,就有了下面图16,但是这张图过于单调简单,反应不出什么信息内容,放在论文中,会让别人认为你在凑篇幅,就抛弃了,代码在文件abandonAllPrecision.py

对比算法分析

我的对比算法都喜欢放在一张图中来看,先来看对比精确率和召回率,个人感觉图17最大的缺点就是不突出自己的算法,这样无法让别人无法一眼就看出论文算法性能如何,所以后来就抛弃了,代码在文件middleAbandonComparedPreRecallEnglishPaper.py

图18这是另外一篇中文论文中的,展示对比算法的精确率,但是这张图总感觉很单调,缺少一种紧凑感,代码在文件abandonPreciChinesePaper.py

后来为了添加信息,就放入了全部信息,画出了图19,不过感觉这张图对比不出来,可能最主要的就是因为这是一张折线图,后来就改成了柱状图了,代码在文件abandonComparedPrecisionAndRecallChinesePaper.py

最后就是对比算法的时间,个人感觉图20画的其实还行,我本以为不用常规柱状图就不那么单调,所以就把柱状横过来了,后来被改了,论文中的图片还是严肃一点好,代码在文件abandonComparedTimeEnglishColo.py

中文论文中时间的对比,先是直接用的英文论文中的图片程序,画出来的就是图21,但是期刊要求的是图片都是黑白的,不能是色彩图片,因此后来就被抛弃,代码在文件abandonComparedTimeChineseColo.py

最终改成了黑白的,变成了图22,但是后来还是被打回来了,对比算法应该是对比各算法,突出的就是算法之间的变化,应该将横坐标变成数据,然后算法在一起比较,所以被抛弃了,代码在文件abandonComparedTimeChinesePaper.py

专利图片

专利中的图片都是黑白色,有很多图片都是直接使用论文中的程序画出来就行了,基本都是变色和将算法区分开使用到的线条形状就行了。我们先来看部分数据的精确率和召回率,俩张图都是一样的程序,因此这里只贴出精确率的图片,图23来看,就是黑白色,并且变化线条形状,代码在文件PatentComparisonAlgorithmPrec.py

后面的对比算法中全部精确率和召回率也是如此,如图24,当然专利中的算法依旧要突出,代码在文件PatentComparisonAlgorithmPrecAndRecall.py

再看对比算法的时间,个人感觉图25还是很好看的,也很清晰的对比出各算法的时间,并且各柱形都有明显的区别,代码在文件PatentComparisonAlgorithmTime.py

在画时间的时候,其实还有一张被抛弃的图片,就是图26,这张图也挺好看的,色彩比较淡,但是整体感观很高,就是它不是黑白的,因此不能放入其中,代码在文件abandonPatentComparisionAlgorithmChinese.py

总结

结果可视化感觉还挺重要,毕竟文字的抽象,只有图片才能让人一眼就直观的看出你想要表达的东西,在论文中,我一般都是使用matplotlib和seaborn实现的,后期就不用seaborn,因为它感觉无法定制自己想要的图片,还是matplotlin大法才是最好的,可以随心所欲的画出自己想要的结果图片。本文中所有的程序代码都在我的github

08-07 22:37