目的:将matlab二维数组通过plot3形象的三维图表达
成果图如上图所示,黑色的线,红色的线和绿色的线分别代表数据集中的三个标签类别,横轴代表样本总数90个(图中没有截全,只能看到40左右),纵轴代表每个样本的长度256个点。
主要实现函数(plot3)
步骤分为:
1.绘出plot3的图形
2.根据分类标签改变图形的颜色
步骤一:绘出plot3的图形
不熟悉plot3函数的朋友们可以先使用帮助help或doc plot3 了解的matlab自带例程,然而会发现例程中直接使用函数cos(),而没有用一个现成的数组。
因而我们需要自己写个XY网格,在将我们的数组换成对应的Z。
为方便大家理解代码,增加了变量bios=n,用于移除每个样本前n个数值。
数据样本设置:data_all=90 × 256 double
bios=10; %移除数据样本中前bios个数据,不需要移除数据设置为0就行
[X,Y] = meshgrid(bios:size(data_all,2),1:size(data_all,1)); %建立XY网格
Z = data_all(:,bios:end);
plot3(X,Y,Z,'color',[0.5 0.5 0.5]) %绘制plot3图,设置全部颜色为灰
运行结果如下
步骤二 .根据分类标签改变图形的颜色
这里我通过多次调用plot3实现了改变局部颜色的重绘覆盖,然而这个方法虽然实现了功能,但显然可以看出其效率不高,希望各路大神指点。
接上面的代码继续:
变量说明:label为我90个数据样本的标签集,大小为:90 × 1 double,数据只为1,0或者-1
for i=1:numTrials%遍历每个样本
hold on
if(label(i) == -1)%%标签如果为-1
Z = data_all(i,bios:end);
plot3(X(i,:),Y(i,:),Z,'k') %%当前样本颜色重绘为黑色
else if(label(i) == 1 ) %%标签如果为1
Z = data_all(i,bios:end);
plot3(X(i,:),Y(i,:),Z,'r') %%当前样本颜色重绘为红色
else if(label(i) == 0)%%标签如果为0
Z = data_all(i,bios:end);
plot3(X(i,:),Y(i,:),Z,'color',[0.4 0.7 0.4])%%当前样本颜色重绘为浅绿色
end
end
end
end
运行结果如下:
不足:
可以看到这个方法只改变了纵向(样本数据)线条的颜色,而横向(样本个数)线条的颜色并未改变。某菜在这里抛砖引玉,希望诸位大佬能够提出更好的解决方法~