问题描述:
一堆数据分批次使用算法进行处理,算法根据数据的特征将每批数据归类到A、B、C、D、E五个档次中的一个,并计算此种分类的概率。另有一图,记录所有批次数据的分类结果,横轴为批次,纵轴为概率,点的不同样式代表不同的分类档次,如图1所示。该图在线更新,即每运行一次算法,就在原图基础上加上一组数据的分类结果和概率。现需要为该图动态加上图例,说明图中出现的点与分类档次的对应关系。
![a3c0d61f79ce8526cb1bbf2312a1eeff.png](https://img-blog.csdnimg.cn/img_convert/a3c0d61f79ce8526cb1bbf2312a1eeff.png)
解决方案:
目前考虑了一下方法:
- 方法一
核心思想:根据分类结果将数据放在五个不同的数组中,每个数组存储数据所在组的索引和概率值,绘图时直接绘制五个数组中的数据并按照常规方法添加图例。
优点:简单易实现。
缺点:在该场景中,算法每执行一次就需要将新的结果添加到图中,若每次都绘制整个数组,效率不高,且随着数据量的增加,需要的存储空间越来越大。
- 方法二
核心思想:对方法一进行改进,依然使用五个数组,但数组只保存第一次或最近一次该分类的索引和概率,每次绘制更新后再将数组中的五个点plot一次(如果某类型数组为空就不绘制该类型的点,后面的line对象集合中也不包含该类型),用元胞存下plot对象并使用legend(axes,[plot对象集合],{与line对象对应的字符串集合})方法添加图例,其中[]代表数组类型,{}代表元胞类型。
- 方法三
核心思想:使用五个变量记录每个分类的数据组数,并将每个分类的最近一次plot对象存在元胞中,然后将变量转为logical类型,对plot对象进行筛选和图例字符串进行筛选。
str_legend
注:引入计数变量来判断是否有对应类型的plot对象,这是因为元胞数组p的判空需要使用循环,计算量也比判断数值变量更大。
使用方法三运行效果如图2所示。
![576cd94ed86be521db9971f56a56a78e.gif](https://img-blog.csdnimg.cn/img_convert/576cd94ed86be521db9971f56a56a78e.gif)