分享

重新学习MATLAB——作图技法及3D可视化

 soundtouch 2019-02-16

了解点儿MATLAB,知道它非常有用,但一直不太会用,如何快速掌握并运用它呢?

本专栏力争用最简洁的语言和逻辑,让您在最短时间内,学到教材课程中罕见的MATLAB运用技法,从新手迈向成手。

超强的MATLAB作图功能

MATLAB不仅是处理矩阵的神器,还是矩阵可视化的神器。

什么叫矩阵可视化?

其实,我们分析数据/处理信号/解析图像等等这一类的操作,都是对矩阵的操作,并把它可视化出来。

水波图像看着复杂,其实无非是可视化的矩阵而已

直接上手最常用作图函数——plot

plot,用来绘制二维的图线

x = 0:pi/100:2*pi;y = sin(x);plot(x,y)

自动弹出一个界面并显示结果

观察一下代码,x是从0到2pi(也就是360度),间隔是pi/100,也就是说,分成了200小段。

x是个向量,所以y=sin(x)也是一个相同尺寸的向量

plot(x,y)就是把对应位置的xy连成直线

有同学会问了,我明明看到的是曲线,你怎么说是直线?

这样,我把x变成 x = 0:pi/5:2*pi ,再看看结果:

分的段过少,图线误差就大,变成折线了

所以说,完全取决于分成多少小段,类似于图像处理中的分辨率

常用技术:一图画多线

一张图中,为了方便对比,想一起画n条曲线,怎么做呢?

x = linspace(-2*pi,2*pi);y1 = sin(x);y2 = cos(x);figureplot(x,y1,x,y2)

一图多线,方便对比

说明:linspace的用法类似于冒号;需要写2遍x,不可遗漏。

plot其它功能介绍

plot太常用了,是绘图的基础,大家一定help看一下,这里再详细补充一下。

plot还有太多功能了,比如:

  • 设置线型/线颜色/线粗
  • 设置marker的形状/颜色/大小
  • 设置标题和坐标轴
  • 设置网格线和标注
  • 使用subplot实现一张大图中多个小图

来个例子吧。

ax1 = subplot(2,1,1); % top subplotx = linspace(0,3);y1 = sin(5*x);plot(ax1,x,y1)title(ax1,'Top Subplot')ylabel(ax1,'sin(5x)')ax2 = subplot(2,1,2); % bottom subploty2 = sin(15*x);plot(ax2,x,y2)title(ax2,'Bottom Subplot')ylabel(ax2,'sin(15x)')

一张大图中包含两个小图

这里的subplot(2,1,1)明显又是矩阵思维,“2,1” 不就是代表2行1列的意思么!

所以说,矩阵思维贯穿MATLAB始终

三种常用2D作图之——条形图bar

y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];bar(y)

自动分组,自动上色

挺方便的吧,几个数字就完成一张图的绘制。

这里观察y的结构和bar图的对应关系,可以知道,每一行被认为是一组,每一列是一类数据共用同样的颜色

误差线图errorbar是条形图中很常用的形式了,尤其学工程尤其医学工程类的同学,是不可不知的——

x = linspace(0,10,15);y = sin(x/2);err = 0.3*ones(size(y)); % 这里的误差是“生成”出来的并不是实验的真实数据errorbar(x,y,err,'-s','MarkerSize',10,... 'MarkerEdgeColor','red','MarkerFaceColor','red')

误差线图——每个“工”字形代表这个数据的误差范围

三种常用2D作图之——直方图hist

x = randn(1000,3); hist(x)

能看出正态分布的趋势么?

这里使用了一个正态分布的随机函数randn,1000行3列。

  • 还有一种漂亮的极坐标直方图——rose

一看名字就知道她的美丽了,为啥叫“玫瑰”呢?请看——

theta = [0.4 1.4 3.1 2.3 0.4 2.5 3.9 2.8 2.3 1.6 4.6 4.5 6.1 3.9 5.1];rose(theta,10)

多像一朵玫瑰花

这是极坐标下的直方图形式,需要注意的是,虽然有点像,但它并不是传统意义上的饼图,因为饼图有专用的函数——

三种常用2D作图之——饼图pie

X = [1 3 0.5 2.5 2];pie(X)

自动产生比重值和颜色

X是一个向量,每个元素代表一类对象的值

再来一个高级用法:

X = categorical({'North','South','North','East','South','West'});explode = {'West'};labels = {'E','N','S','W'};pie(X,explode,labels)

MATLAB的饼图也挺好看的吧

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多