Matlab绘图方法整理(超完整版)

使用Matlab绘图

  • 图像是结果的一种可视化表现,它能直观的体现你的结果,并且能体现你获得结果的准确性,在当前的大数据时代,在做数据分析的时候,将其可视化可以直观多维的展示数据,可以让人们更好的发现并且记住数据的特征,因此很多时候掌握一些绘图方法是非常重要的,而使用MATLAB可以非常简单的进行绘图(当然还有很多其它工具可供使用),下文是我所了解的一些基本绘图方法的整理,其中很多很多内容非常基础,希望对你能有些帮助。

二维作图

二维图像是我们在学习过程中经常会接触到的图像,比如在做数学题目时随手画出的一个正弦曲线,这个图像往往是我们根据它的函数做出来的,事实确是这样,在我们学习过程中画出来的每一个图像几乎都是函数,反过来说,每一个函数都对应着它自己的图像,我们能画出来的二维图像往往是一个一元函数即二元方程,在Matlab中做二维图像也是这样,我们根据一个函数来画出它的图像,不过要注意的一点是,在Matlab画图的过程中,它并不认识你给出的那个函数,它要做的仅仅是把你给出的函数上的点连成线而已。

  • plot和fplot

在Matlab里面做二维图像最基础也是最常用的两个函数:plot()fplot()函数,其中,plot的经常使用的方法有下面三种:

one plot(x)
two plot(x,y,参数)
three plot(x1,y1,x2,y2,...,xn,yn)

首先,第一种方法里面若x为一维数组,则作出的图像是以其数组长度为横坐标,间隔为1,以数组中的具体值为纵坐标的。而其也可以为复数变量,如下:

	y = [5,10,15,20]
	z = [100,200,300,400]
	x =y+z*i
	//这里的x经过此定义将会被认为是一个复数变量
	//图像将会以实部即y为横坐标,虚部即z为纵坐标作图

对于第二种形式就更好理解了,往往其中的x、y都为一维数组,其实y也就是x对应的函数值,后边的参数用于指定曲线的线形、颜色和数据点标记,如下:

	x = [0:0.01:10]
	y = sin(x)
	plot(x,y,'-r*')

可以看到,x是一个长度为1001的一维数组,y是和x等长的在sin(x)上的一维数组,后边的-r*分别为曲线线性、颜色、数据点标记,其中参数的一些具体属性如下表所示:

线形颜色数据点标记
'-' : 实线'k' : 黑色* : 星号
':' : 虚线b : 蓝色o : 圆圈
'-.' : 点划线c : 蓝绿色s : 方块
'--' : 双划线g : 绿色p : 五角星
m : 洋红色^ : 朝上三角符号
r : 红色X : 叉
w : 白色+ : +
y : 黄色d : 菱形
v : 朝下三角符号
< : 朝左三角符号
> : 朝右三角符号
H : 六角形
这些就是基本的绘图参数指令,搭配使用效果更佳。关于参数的使用是在每种方法中都可以添加,三种常用示例只是简单示例。关于第三种使用方法,意思是把n个图像做出在一个窗口中,同时也少敲了几个plot,当然,如果你想把代码分开写也可以,只需要加上hold on命令就行了,关于它后文会有介绍。
而关于fplot,其基本使用方法如下:

one fplot(f,lims,参数)
two fplot(funx,funy,tlims,参数)

在第一种方法中,f代表一个函数,通常采用函数句柄的形式。lims为x轴的取值范围,用二元向量[xmin,xmax]描述,默认值为[-5,5]。参数定义与plot函数相同。例如使用fplot函数绘制sin(x)图像如下:

	fplot(@(x)sin(x),[0,10],'-r')

在第二种方法中,funx、funy代表函数,通常采用函数句柄的形式。tlims为参数函数funx和funy的自变量的取值范围,用二元向量[tmin,tmax]描述。如绘制参数方程(x=tsint,y=tcost)曲线如下:

	fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,10*pi],'-r')
其它形式下的二维曲线图

上文举例说明了最基础最常用的两个做二维曲线的函数,实际上,二维图形的种类还有很多,不光只有一根线构成的曲线图,还有各种统计图、坐标图等等,相应的在Matlab中也有画它们图形的方法,下面是其它几种图形作图方法(非全部):

  • 对数坐标图

semilogx(x1,y1,'参数',x2,y2,'参数'...)
semilogy(x1,y1,'参数,x2,y2','参数'...)
loglog(x1,y1,'参数',x2,y2,'参数'...)

其中,semilogx函数x轴为常用对数刻度,y轴为线性刻度;semilogy函数x轴为线性刻度,y轴为常用对数刻度;loglog函数x轴和y轴均采用常用对数刻度。

  • 极坐标图

polar(theta,rho,'参数')

其中,theta为极角,rho为极径,参数内容与plot相同。

  • 条形图

bar(y,style)
bar(x,y,style)

	x = [2018,2019,2020]
	y = [10,20,30,40,50;
		 10,20,30,40,50;
		 10,20,30,40,50];
	bar(x,y)

第一个,参数y是数据,选项style用于指定分组排列模式,模式有两种供选择,分别为:'grouped':簇状分组,'stacked':堆积分组。
第二个,x存储横坐标,y存储数据,y的行数必须与向量x的长度相同。选项style用于指定分组排列模式。
具体效果请自行练习查看。

  • 直方图

hist(y)
hist(y,x)

其中,y是要统计的数据,x用于指定区间的划分方式。若x是标量,则统计区间均分成x个小区间;若x是向量,则向量x中的每一个数指定分组中心值,元素的个数为数据分组数。x缺省时,默认按10个等分区间进行统计。

rose(theta[],x)

其中,参数theta用于确定每一区间与原点的角度,选项x用于指定区间的划分方式。

  • 面积类图形

pie(x,explode)

其中,参数x存储待统计数据,选项explode控制图块的显示模式。使用如下,可以试着改下参数或者help一下看看。

	score = [10,25,3,18,41]
	ex = [0,0,0,0,1]
	pie(score,ex)
  • 散点类图形

scatter(x,y,选项,'filled')

其中,x、y用于定位数据点,选项用于指定线型、颜色、数据点标记。如果数据点标记是封闭图形,可以用选项’filled’指定填充数据点标记。该选项省略时,数据点是空心的。
一颗心:

	t = 0:pi/50:2*pi
	x = 16*sin(t).^3
	y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
	scatter(x,y,'rd','filled')
  • 矢量类图形

quiver(x,y,u,v)

其中,(x,y)指定矢量起点,(u,v)指定矢量终点。x、y、u、v是同样大小的向量或同型矩阵,若省略x、y,则在x-y平面上均匀取若干个作为起点。

	已知向量AB,求A+B,并用矢量图表示。
	A = [4,5]; B = [-10,0]; C = A+B;
	hold on 
	quiver(0,0,A(1),A(2));
	quiver(0,0,B(1),B(2));
	quiver(0,0,C(1),C(2));
	text(A(1),A(2),'A');text(B(1),B(2),'B');
	text(C(1),C(2),'C')
	axis([-12,6,-1,6])
	grid on
  • 进阶:双Y轴绘图

plotyy()

示例代码:

	x	= 	[0:0.01:20]
	y1	=	200*exp(-0.05*x).*sin(x)
	y2	=	0.8*exp(-0.5*x).*sin(10*x)
	plotyy(x,y1,y2)

三维作图

在上文的二维作图示例中我们可以知道二维作图的基本方法,而有时候二维的图形满足不了我们的需要,这个时候就需要做一些三维图像了,而三维图像里边除了包含曲线作图之外还包含曲面作图。

三维曲线

在二维曲线作图里边我们主要使用的函数是plotfplot函数,而在三维曲线作图里面我们使用的是plot3fplot3函数,其不但长得像,功能也是差不多的,只不过是做了扩展而已。

  • plot3和fplot3

关于plot3函数,其基本用法如下:

one plot3(x,y,z,参数)
two plot(x1,y1,z1,x2,y2,z2,...,xn,yn,zn)

是不是似曾相识,没错,它和plot功能确实非常像,只是多了一维数据而已。如要画出sin(x)的三维图,只需这样就好:

	x = [0:0.01:10]
	y = x
	z = sin(x)
	plot3(x,y,z,'-r')

怎么样,是不是非常简单,假如要绘制个空间的螺旋线,其参数方程为:x=sint+tcost,y=cost-tsint,z=t,只需这样就好:

	t = [0:0.1:10*pi]
	x = sin(t)+t.*cos(t)
	y = cos(t)-t.*sin(t)
	z = t
	plot3(x,y,z)

对于plot3函数来讲,它的参数x,y,z不止可以是一维数组,实际上:

  • 参数x、y、z是同型矩阵时,以x、y、z对应列元素绘制曲线,曲线条数等于矩阵列数。
  • 参数x、y、z中有向量,也有矩阵时,向量的长度与矩阵相符。

对于其不止一组数据的方法2,其作用与plot类似,每一组x、y、z向量构成一组数据点的坐标,绘制一条曲线。
而plot3函数的后面线型、颜色和数据点标记的参数则与plot完全一致。
对于fplot3函数,其基本引用方法如下:

fplot3(funx,funy,funz,tlims)

其中,funx、funy、funz代表定义曲线x、y、z坐标的函数,通常采用函数句柄的形式。tlims为参数函数自变量的取值范围,用二元向量[tmin,tmax]描述,默认为[-5,5],与fplot是几乎完全一致的,不再举例。

三维曲面

在做三维曲面图的时候,第一步往往是生成一个平面网格,这个平面网格是什么东西呢,其实就是用矩阵X、Y分别存储每一个小矩形顶点的x坐标与y坐标,矩阵X、Y就是该矩形区域的xy平面网格坐标矩阵:
在这里插入图片描述
说的简单些,就是给我们要用的空间坐标系做个底面出来,本来x、y都是一维向量,它们也就是只能当两根轴,这个时候用新的两个X、Y矩阵来把空间坐标系的二维地面给表示出来,这样的话每一个[X,Y]就都能对应一个Z了,就是这个意思。在MATLAB中,产生平面区域内网格坐标矩阵有两种方法:

  • 1.利用矩阵运算生成:
	X = ones(size(y))*x
	Y = y*ones(size(x))
  • 2.利用meshgrid函数生成:
	[X,Y] = meshgrid(x,y)
  • 绘制三维曲面的函数

mesh(x,y,z,c)
surf(x,y,z,c)
mesh(z,c)
surf(z,c)

其中,x、y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的曲面颜色。c省略时,颜色的设定正比于图形的高度。
当x、y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第一维下标当作y轴坐标。
另外还有一些其它的绘制三维曲面的函数:

带等高线的三维网格曲面函数meshc
带底座的三维网格曲面函数meshz
具有等高线的曲面函数surfc
具有光照效果的曲面函数surfl

这些函数使用都和mesh还有surf大致相同,可自行练习了解。

	//用4种方式绘制函数z=(x-1)^2+(y-2)^2-1的曲面图
	//其中,x=[0,2],y=[1,3]

	[x,y]=meshgrid(0:0.1:2,1:0.1:3)
	z=(x-1).^2+(y-2).^2-1
	subplot(2,2,1);meshc(x,y,z)
	subplot(2,2,2);meshz(x,y,z)
	subplot(2,2,3);surfc(x,y,z)
	subplot(2,2,4);surfl(x,y,z)
  • 标准三维曲面

[x,y,z]=sphere(n)

产生3个(n+1)阶的方阵,采用这3个矩阵可以绘制出圆心位于原点、半径为1的单位球体。

[x,y,z]=cylinder(R,n)

其中,参数R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。
peaks函数
调用格式:

	peaks(n)	>>	p1=peaks(10)
	peaks		>>	p2=peaks
	peaks(V)	>>	p3=peaks(-3:0.2:3)
	peaks(x,y)	>>	[x,y]=meshgrid(-2:0.1:2,0:0.1:5)
					p4=peaks(x,y)
  • fmesh函数和fsurf函数
    用于绘制参数方程定义的曲面

fsurf(funx,funy,funz,uvlims)
fmesh(funx,funy,funz,uvlims)

其中,funx、funy、funz代表定义曲面x、y、z坐标的函数,通常采用函数句柄的形式。uvlims为funx、funy和funz的自变量的取值范围,用4元向量[umin,umax,vmin,vmax]描述,默认为[-5,5,-5,5]。

图形修饰辅助操作

到这里,不管是二维曲线三维曲线还是曲面,大家掌握的方法都差不多了,图大概率是能被我们做出来了哈哈哈,不过能把图做出来固然重要,可更重要的是还能做出美图来,这就离不开我们的图形修饰了,比如给做好的图形加个标题加个注释什么的,我们要做出来图,还要做出来细图,更要做出来美图,接下来文章将列举我们经常使用的并且很有用的图形修饰辅助操作。

基础绘图指令

除去上文所述plot等绘图函数命令之外,还有有一些其它修饰图形的常用命令。

指令作用
figure(num)新打开一个图形窗口,num为窗口序号
hold on从指令开始,将后续所有图形绘制在一个figure窗口中
hold off和hold on搭配使用,此指令开始,后续图形不再与之前图形绘制在一个窗口中
axis on显示坐标轴
axis off不显示坐标轴
axis square使坐标轴区域为正方形
axis normal自动调整轴的长宽比和数据单元的相对比例
axis equal设置纵横比,使数据单元为各方面都一样
axis equal tight将轴限制设置为数据的范围
axis ij把坐标系统的原点放在左上角
axis xy把原点放在左下角

这些呢是一些常用的辅助绘图指令,没有参数,直接在脚本输入就行,功能已经列在表中非常明确,大家可以自行练习查看实用效果。
接下来是一些带参数的绘图指令,它们可以帮你进行图形标注、坐标控制等等一系列功能,非常实用,记得好好学习。

图形标注函数

title(图形标题)
xlabel(x轴说明)
ylabel(y轴说明)
text(x,y,文本说明)
legend(图1,图2,...,参数...)

值得一提的是,上面这些函数的使用方法远不及示例这么简单,它们都有非常多的参数可供选择使用,示例只是列出最简单、最常用的方法,下面是两段代码:

	//没有图形标注
	x	=	0:0.5:4*pi
	y1	=	sin(x)
	y2	=	cos(x)
	y3	=	1./(1+exp(-x))
	y4	=	(1/(2*pi)^0.5).*exp(((-1).*(x-2*pi).^2)./(2*2^2))
	plot(x,y1,x,y2,x,y3,x,y4)
	//加上简单图形标注
	title('四条函数图像')
	xlabel('横坐标')
	ylabel('纵坐标')
	text(0,0,'猜猜我在哪')
	legend('y1','y2','y3','y4','Location','southwest')
  • 图形窗口分割函数subplot

subplot(m,n,p)

其中,m和n指定将窗口分成mXn个绘图区,p指定的是当前图像所在区域,如m=2,n=3,则一个figure窗口被分成2行三列供6个绘图区,可以容纳6个图形。若p=3,说明当前图像要被画进第三个窗口,也就是第二行第一列的窗口内。p小于等于mXn,如:

	x	=	[0:0.1:10]
	y1	=	sin(x)
	y2	=	cos(x)
	subplot(1,2,1)
	plot(x,y1)
	subplot(1,2,2)
	plot(x,y2)
图形修饰处理

前面写了一些基本绘图指令,可以对我们的图形进行简单的修整,让其变得更完备更好看,接下来是一些对图形修饰的方法。

视点处理
  • 方位角:视点与原点连线在xy平面上的投影与y轴负方向形成的角度,正值表示逆时针,负值表示顺时针。
  • 仰角:视点与原点连线与xy平面的夹角,正值表示视点在xy平面上方,负值表示视点在xy平面下方。

在这里插入图片描述

  • view函数

view(az,el)

其中az为方位角,el为仰角。系统默认的视点定义为方位角-37.5°,仰角30°。

	//绘制函数z=(x-1)^2+(y-2)^2-1的曲面图,并从不同视点展示曲面
	[x,y]	=	meshgrid(0:0.1:2,1:0.1:3)
	z	=(x-1).^2+(y-2).^2-1
	subplot(2,2,1);	mesh(x,y,z)
	subplot(2,2,2);	mesh(x,y,z);view(0,90)
	subplot(2,2,3);	mesh(x,y,z);view(90,0)
	subplot(2,2,4);	mesh(x,y,z);view(-45,-60)
色彩处理

默认的,向量元素在[0,1]范围内取值,3个元素一次表示红、绿、蓝三种颜色的相对亮度,称为RGB三元组即[R G B],如[0 0 1]是蓝色,[1 0 0]是红色,[1 1 1]是白色,[0 0 0]是黑色。(当然,也有在[0,255]内取值的,不再介绍)

  • 色图(Colormap)
    首先,创建一个色图矩阵方法如下:
	cmap	=	colormap(parula(5))

其中,parula是内建色图中包含的一个种类,其中参数5可以是任何一个数值,它关系着色图矩阵的范围,一般来说使用的时候省略就好。内建色图如下:
在这里插入图片描述

  • 指定当前图形使用的色图
	//以peaks为例,先渲染图形,后紧跟色图种类即可
	surf(peaks)
	colormap hot

我们也可以不使用系统的色图矩阵,可以自定义任何色图矩阵。如创建一个灰色系列的色图矩阵:

	c	=	[0,0.2,0.4,0.6,0.8,1.0]'
	cmap	=	[c,c,c]		//这样创建的矩阵和	cmap=gray(6)是一样的
	surf(peaks)
	colormap(cmap)
  • 用shading函数来改变着色方式
    参数如下:
名称作用
shading faceted每个网格片用其高度对应的颜色进行着色,默认网格线是黑色
shading flat每个网格片用同一个颜色进行着色,网格线也用此颜色
shading interp网格片内采用颜色插值处理

示例:使用同一色图,以不同着色方式绘制圆锥体

	[x,y,z]	=cylinder(pi:-pi/5:0,10)
	colormap(lines)
	subplot(1,3,1)
	surf(x,y,z);
	shading flat
	subplot(1,3,2)
	surf(x,y,z);
	shading interp
	subplot(1,3,3)
	surf(x,y,z)
图形的裁剪处理

将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。
示例如下:

	//绘制3/4圆
	t	=	linspace(0,2*pi,100)
	x	=	sin(t)
	y	=	cos(t)
	p	=	y>0.5
	y(p)	=	NaN
	plot(x,y)
	axis([-1.1,1.1,-1.1,1.1])
	axis square
	grid on
其它
  • 其实在Matlab中还有两个非常重要的函数:
  • setget,它们两个能非常方便的创建、修改图形的各种属性,如改变坐标轴范围、设置字体和刻度点、设定线条风格等等,不过它们涉及到的使用更深入,在这里不再展开叙述,而事实上,对于我们非常熟知的figure,它也能加上参数来对窗格进行设置,这都是我们经常使用的,但也是经常忽略它们其它功能的函数,如果有兴趣,你可以继续的深入探索下去,更深入的学习能更方便的为我们所用。

总结

好了,感谢你能看到这里,对于这篇文章,它可能的侧重点不是完全教会我们怎么作图,而更多的也可能是提醒我们在Matlab里面可以进行如此操作,对于新手而言,很多没有系统的学习过Matlab的使用,可能里面的很多东西不是我们不会用,而是根本不知道,所以这篇文章大致列出来了很多非常常用的函数方法等,其中的示例仅仅是个示例,它们的用法还有很多,希望大家能够进行再次开拓,深入的了解每个方法的使用。最后,如果你觉得本篇文章对你有用,请点个赞,谢谢!

  • 568
    点赞
  • 3920
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
### 回答1: 正则化方法是一种在图像重构中常用的方法,其目的是减少重构的误差并提高其精度。在序列图像分辨重构中,正则化方法可以被用于降低估计误差和噪声,使得重构图像更加准确和清晰。在Matlab中,我们可以使用许多现成的函数和工具箱来实现这样的正则化方法。 首先,我们需要导入原始图像序列,并用Matlab中的图像处理工具箱将其进行预处理,如灰度化、对比度增强、噪声抑制等操作。接下来,我们需要选择一个合适的正则化方法,并在图像上应用它。 常见的正则化方法包括总变差正则化、L1正则化和L2正则化。总变差正则化通过最小化图像的梯度来减少估计误差,L1正则化和L2正则化则是通过最小化图像的稀疏度和平方和来减少估计误差。在Matlab中,我们可以使用各种优化算法来求解这些正则化问题,并得到所需的重构图像。 最后,我们需要对重构图像进行后处理,如平滑、锐化、颜色空间转换等操作,以进一步提高其质量和美观度。通过这样的步骤,我们可以实现一个完整的序列图像分辨重构过程,从而得到高质量的重构图像序列。 ### 回答2: 序列图像分辨重构是一种图像处理技术,可以将低分辨率图像转换为高分辨率图像。在一些应用场景下,如医学图像处理、卫星遥感图像处理等方面,图像的高分辨率对于正确的数据分析和处理至关重要。 正则化方法是一种用于数值分析和计算机图像处理的技术,它可以限制求解过程中的误差,并在一定程度上控制求解过程的稳定性。在序列图像分辨重构中,正则化方法可以帮助我们解决双边约束、拉普拉斯稀疏性等一些常见问题,提高图像重构的质量。 MATLAB是一种流行的数学软件,它提供了各种函数和工具箱,用于数值分析、数据处理、图形绘制等领域。在序列图像分辨重构中,MATLAB提供了许多有用的函数和工具箱,包括图像去模糊、图像去噪、正则化方法等方面的工具。 序列图像分辨重构MATLAB的基本步骤包括以下几个方面: 1、读取输入图像; 2、预处理输入图像,包括图像去噪、图像去模糊等处理; 3、选择合适的正则化方法,如Tikhonov、基于稀疏表示的方法等; 4、确定合适的分辨率因子; 5、将输入图像转换为分辨率图像; 6、显示输出图像。 在MATLAB中,序列图像分辨重构可以使用内置函数实现,或者自己编写代码实现。编写代码需要一定的数学和图像处理知识,但是可以根据具体需要自定义程序,实现更高质量的图像重构。 ### 回答3: 正则化方法是一种解决序列图像分辨重构问题的常用方法。该方法利用现有的低分辨率图像序列来重构高分辨率的图像序列,从而提高图像的质量和清晰度。在Matlab中,可以通过以下步骤实现: 1. 加载低分辨率图像序列和高分辨率图像序列 2. 根据所选的正则化方法,分别对低分辨率图像序列和高分辨率图像序列进行处理。这些方法包括Tikhonov正则化、奇异值分解(SVD)正则化、总变分(TV)正则化等。 3. 对处理后的低分辨率图像序列进行插值,使其与高分辨率图像序列具有相同的大小。 4. 利用上述处理后的低分辨率和高分辨率图像序列,构建一个分辨率模型。 5. 使用分辨率模型来重构高分辨率图像序列,并保存重构后的图像。 需要注意的是,在实际操作中,正则化方法的具体实现过程和参数设置会根据所选方法和具体数据的特点而有所不同。同时,合理的参数设置对于重构结果的影响也很大,因此需要进行反复试验和比较,以获得最佳的重构效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳寜

“请作者吃颗糖!”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值