Matlab三维绘图plot3按二维数组分类区分颜色

目的:将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

运行结果如下:
在这里插入图片描述
不足:
可以看到这个方法只改变了纵向(样本数据)线条的颜色,而横向(样本个数)线条的颜色并未改变。某菜在这里抛砖引玉,希望诸位大佬能够提出更好的解决方法~

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要将Matlab中的二维数组变成三维图像,可以使用plot3函数。plot3函数可以绘制三维曲线或散点图。首先,需要将二维数组转换为三维坐标系中的点。可以使用meshgrid函数生成x、y坐标,并将二维数组作为z坐标。然后,使用plot3函数绘制三维图像。 以下是一个示例代码: ```matlab % 生成x、y坐标 \[x, y\] = meshgrid(1:size(A, 2), 1:size(A, 1)); % 将二维数组A作为z坐标 z = A; % 绘制三维图像 plot3(x(:), y(:), z(:), 'o'); ``` 这段代码将二维数组A的行绘制为x坐标,列绘制为y坐标,数组元素作为z坐标。然后使用plot3函数绘制三维图像。每个点的坐标由x、y、z三个数组的对应元素确定。 请注意,这只是一个简单的示例,具体的绘图方式可能需要根据具体的需求进行调整。 #### 引用[.reference_title] - *1* *2* [matlab中二维图像的绘制](https://blog.csdn.net/ZHLY0307/article/details/119713320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MATLAB--二维图像和三维图像的绘制](https://blog.csdn.net/m0_58585940/article/details/127602879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值