《MATLAB图像处理375例》——第2章 MATLAB图形的可视化 2.1 二维绘图

简介:

本节书摘来自异步社区《MATLAB图像处理375例》一书中的第2章,第2.1节,作者:MATLAB技术联盟著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第2章 MATLAB图形的可视化

MATLAB图像处理375例
数据可视化是MATLAB一项重要的功能。MATLAB所提供的丰富绘图功能,使得工程科研人员从繁琐的绘图细节中脱离出来,并专注于最关心的本质。通过数据可视化的方法,工程科研人员可以对样本数据的分布、趋势特性有一个直观的了解。

2.1 二维绘图

MATLAB图像处理375例
在MATLAB中绘制二维图形,通常采用以下步骤。

(1)准备数据。

(2)设置当前绘图区。

(3)绘制图形。

(4)设置图形中曲线和标记点格式。

(5)设置坐标轴和网格线属性。

(6)标注图形。

(7)保存和导出图形。

【例2-1】下面通过示例来演示绘图步骤。

在同一坐标轴上绘制cos(x)、cos(2x)和cos(3x)这三条曲线。

clear all; 
%准备数据
x=0:0.01:3*pi;
y1=cos(x);
y2=cos(2*x);
y3=cos(3*x);
%设置当前绘图区
figure;
%绘图
plot(x,y1,x,y2,x,y3);
%设置坐标轴和网格线属性
axis([0 8 -2 2]);
grid on;
%标注图形
xlabel('x');
ylabel('y');
title('演示绘图基本步骤')
legend('cos(x)','cos(2x)','cos(3x)')
legend('cos(x)','cos(2x)','cos(3x)')

运行结果如图2-1所示。

screenshot

2.1.1 基本的二维绘图
plot函数是最基本、最常用的绘图函数,用于绘制线性二维图。有多条曲线时,循环使用由坐标轴颜色顺序属性定义的颜色,以区别不同的曲线;之后再循环使用由坐标轴线型顺序属性定义的线型,以区别不同的曲线。它的多种语法格式如下。

(1)plot(Y ):若Y是一维数组时,plot(Y )是把(i,X(i))各点顺次连接起来,其中i的取值范围从1到length(X )。若Y 是普通的二维数组时,相当于对Y 的每一列进行plot(Y (:,i))画线,并把所有的折线累叠绘制在当前坐标轴下。

(2)plot(X,Y ):若X 和Y 都是一维数组时,功能和line(X,Y )类似;但plot函数中的X 和Y 也可以是一般的二维数组,这时就是对X 和Y 的对应列画线。特别的,当X 是一个向量、Y 是一个在某一方向和X 具有相同长度的二维数组时,plot(X,Y )则是对X 和Y 的每一行(或列)画线。

(3)plot(X1,Y1,X2,Y2,…., Xn,Yn):表示对多组变量同时进行绘图,对于每一组变量,其意义同前所述。

(4)plot(X1,Y1,LineSpec,...):其中LineSpec是一个指定曲线颜色、线型等特征的字符串。可以通过它来指定曲线的线型、颜色以及数据点的标记类型,如表2-1所示。这在突出显示原始数据点和个性化区分多组数据的时候是十分有用的。
screenshot

【例2-2】绘制矩阵的图形。

clear all;
t=[0:0.15:24];
medium=[t,t,t]+i*[cos(-t/4),sin(3*t+3),log(1+t)];
plot(medium,'LineWidth',2);
xlabel('t');
ylabel('Y');
legend('cos(-t/4)','sin(4*t+3)','log(1+t)');

运行结果如图2-2所示。

screenshot

【例2-3】利用line函数绘制cos函数图形。

clear all;
x=0:0.15:1.5*pi;
y=cos(x);
line(x,y);
axis([0 7 -1.5 1.5]);
xlabel('x');
ylabel('y');

运行结果如图2-3所示。

screenshot

【例2-4】画同心圆。

clear all;
theta=linspace(0,3*pi,50);   %圆心角的抽样点设置
r=0.4:0.24:1.74;         %半径长度的抽样点设置
x=1+cos(theta)'*r;
y=2+sin(theta)'*r;
plot(x,y,1,2,'+');
axis([-1 3 0 4]);
axis equal;
xlabel('x');
ylabel('y');

运行结果如图2-4所示。

screenshot

【例2-5】利用plot函数绘制函数效果图,并对其进行线型设置。

clear all;
x = -pi:pi/9:pi;
y = sin(cos(x)) - cos(sin(x));
plot(x,y,'--rs','LineWidth',2,...
        'MarkerEdgeColor','w',...
        'MarkerFaceColor','r',...
        'MarkerSize',9)

运行结果如图2-5所示。

screenshot

2.1.2 figure函数与subplot函数
在MATLAB中,figure函数用于创建一个新的图形对象。图形对象是在屏幕上单独的窗口,在窗口中可以输出图形。

subplot函数用于生成与控制多个坐标轴。把当前图形窗口分隔成几个矩形部分,不同的部分是按行方向以数字进行标号的。每一部分有一坐标轴,后面的图形输出于当前的部分中。subplot函数的用法有以下7种。

(1)h=subplot(m,n,p)/subplot(mnp):将figure划分为m×n块,在第p块创建坐标系,并返回它的句柄。当m,n,p<10时,可以简化为subplot(mnp)或者subplot mnp。(注:subplot(m,n,p)或者subplot(mnp)最常用。subplot是将多个图画到一个平面上的工具。其中,m表示图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图,p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。)

(2)subplot(m,n,p,'replace'):如果所指定的坐标系已存在,就创建新坐标系将其替换。

(3)subplot(m,n,P ):此时P为向量,表示将P中指定的小块合并成一个大块创建坐标系,P中指定的小块可以不连续,甚至不相连。比如subplot(2,3,[2 5])表示将第2和5小块连成一个大块;subplot(2,3,[2 6])由于2和6不连续也不相连,此时表示将第2、3、5和6四块连成一个大块,相当于subplot(2,3,[2 3 5 6])。

(4)subplot(h):将坐标系h设为当前坐标系,相当于axes(h)。

(5)subplot('Position',[left bottom width height]):在指定位置创建一个新坐标系,等效于axes('Position',[left bottom width height]) 。

(6)subplot(..., prop1, value1, prop2, value2, ...):在创建坐标系时,同时设置相关属性,axes属性参见附录。

(7)h = subplot(...):返回所创建坐标系的句柄。

【例2-6】画出参数方程的图形。

clear all;
t1=0:pi/4:3*pi;
t2=0:pi/25:3*pi;
x1=3*(log(t1)+t1.*sin(t1));
y1=3*(sin(t1)-t1.*log(t1));
x2=3*(cos(t2)+t2.*sin(t2));
y2=3*(sin(t2)-t2.*cos(t2));
subplot(2,2,1);plot(x1,y1,'r.');
subplot(2,2,2);plot(x2,y2,'r.');
subplot(2,2,3);plot(x1,y1);
subplot(2,2,4);plot(x2,y2);

运行结果如图2-6所示。

screenshot

【例2-7】利用subplot(m,n,P)函数对图形进行分割。

%均匀分割
figure
subplot(2,2,1)
text(.5,.5,{'1'},...
  'FontSize',20,'HorizontalAlignment','center')
subplot(2,2,2)
text(.5,.5,{'2'},...
  'FontSize',20,'HorizontalAlignment','center')
subplot(2,2,3)
text(.5,.5,{'3'},...
  'FontSize',20,'HorizontalAlignment','center')
subplot(2,2,4)
text(.5,.5,{'4'},...
  'FontSize',20,'HorizontalAlignment','center')

均匀分割的运行结果如图2-7所示。

screenshot

%左右分割
figure
subplot(2,2,[1 3])
text(.5,.5,' [1 3]',...
  'FontSize',20,'HorizontalAlignment','center')
subplot(2,2,2)
text(.5,.5,'2',...
  'FontSize',20,'HorizontalAlignment','center')
subplot(2,2,4)
text(.5,.5,'4',...
  'FontSize',20,'HorizontalAlignment','center')

左右分割的运行结果如图2-8所示。

screenshot

2.1.3 二维图形的标住与修饰
在MATLAB中,提供了一些图形函数,专门对所画出的图形进行进一步的修饰,以使其更加美观、更便于应用。图形绘制以后,需要对图形进行标注、说明等修饰性的处理,以增加图的可读性,使之反应出更多的信息。下面将分别介绍这些函数。

1.xlabel、ylabel函数与title函数
在MATLAB中,xlabel、ylabel函数用于给x、y轴贴上标签;title函数用于给当前轴加上标题。每个axes图形对象可以有一个标题。标题定位于axes的上方正中央。这些函数的用法如下。

(1)xlabel('string'):表示给当前轴对象中的x轴贴标签。

(2)ylabel('string'):表示给当前轴对象中的y轴贴标签。

(3)title('string'):表示在当前坐标轴上方正中央放置字符串string作为标题。

(4)Title(...,'PropertyName',PropertyValue,...):可以在添加或设置标题的同时,设置标题的属性,如字体、颜色、加粗等。

【例2-8】xlabel、ylabel函数与title函数使用示例。

x=[2004:1:2013];
y=[1.45 0.91 2.3 0.86 1.46 0.95 1.0 0.96 1.21 0.74];
xin=2004:0.2:2013;
yin=spline(x,y,xin);
plot(x,y,'ob',xin,yin,'-.r')
title('某地十年的年平均降水量图')
xlabel('年份','FontSize',10)
ylabel('每年降雨量','FontSize',10)

运行结果如图2-9所示。

screenshot

2.axis函数
在MATLAB中,axis函数用于根据需要适当调整坐标轴。

(1)axis([xmin xmax ymin ymax]):此函数将所画的x轴的大小范围限定在{xmin,xmax}之间,y轴的大小范围限定在{ymin,ymax}之间。

(2)axis(str):将坐标轴的状态设定为字符串参数str所指定的状态。参数str是由一对单引号所包起来的字符串,它表明了将坐标轴调整为哪一种状态。

(3)variable=axis:变量variable保存的是一个向量值,显然这个向量值能够以axis(variable)的形式应用于设定坐标轴的大小范围。

(4)[s1,s2,s3]=axis('state'):将当前所使用的坐标轴的状态存储到向量[s1,s2,s3]中。s1说明是否自动设定坐标轴的范围,取值为'auto'或'manual';s2说明是否关闭坐标轴,取值为'on'或'off ';s3说明所使用的坐标轴的种类,取值为'xy'或'ij'。表2-2揭示了axis函数的用法。
screenshot

【例2-9】利用函数axis调整y=cosx的坐标轴范围。

x=0:pi/100:2*pi;
y=log(x);
line([0,2*pi],[0,0]) 
hold on;
plot(x,y)
axis([0 2*pi -1 1])

运行结果如图2-10所示。

screenshot

【例2-10】利用函数axis绘制一个圆。

alpha=0:0.01:2*pi;
x=cos(alpha);
y=sin(alpha);
plot(x,y)
axis([-2 2 -2 2])
grid on
axis square

运行结果如图2-11所示。

screenshot

3.grid函数与legend函数
grid函数用于给二维或三维图形的坐标面增加分隔线。legend函数用于在图形上添加图例。该命令在有多种图形对象类型(线条图、条形图、饼形图等)的窗口中显示一个图例。对于每一线条,图例会在用户给定的文字标签旁显示线条的线型、标记符号和颜色等。这些函数的用法如下。

(1)grid on:表示给当前的坐标轴增加分隔线。

(2)grid off:表示从当前的坐标轴中去掉分隔线。

(3)grid:表示转换分隔线显示与否的状态。

(4)legend('string1', 'string2',…, pos):表示用指定的文字string在当前坐标轴中对所给数据的每一部分显示一个图例,在指定的位置pos放置这些图例。

(5)legend('off'):清除图例。

(6)legend('hide'):隐藏图例。

(7)legend('show'):显示图例。

【例2-11】给正弦函数图形的坐标面增加分隔线。

x=-pi:0.1:pi;
y=cos(x);
plot(x,y)
title('正弦函数')
grid on

运行结果如图2-12所示。

screenshot

【例2-12】利用grid命令去掉单位圆图形的网格线。

alpha=0:0.01:2*pi;
x=sin(alpha);
y=cos(alpha);
plot(x,y)
axis([-1.2 1.2 -1.2 1.2])
grid off
axis square

运行结果如图2-13所示。

screenshot

【例2-13】使用函数legend在图形中添加图例。

y=magic(2);bar(y);
legend('第一列','第二列',2);
grid on

运行结果如图2-14所示。

screenshot

【例2-14】图形标定函数legend使用示例。

x=0:0.01*pi:4*pi;
y1=2*sin(x);
y2=cos(x);
plot(x,[y1;y2])
axis([0 4*pi -2 2.5])
set(gca,'XTick',[0 pi 2*pi],'XTickLabel',{'0','pi','2pi'})
legend('2* cos (x)',' sin (x)')

运行结果如图2-15所示。

screenshot

4.fill函数与hold函数
在MATLAB中,fill函数用于对一个封闭的图形进行填充处理;hold函数用于对当前的绘图叠加。这些函数的调用方法如下。

(1)fill(x,y,d):用d指定颜色来填充建立一个多边形。其中d 为颜色映像索引向量或矩阵或颜色字符('r', 'g', 'b', 'c', 'm', 'y', 'w', 'k' )。若d 是列向量,则length(d)必须等于size(x,2)与size(y,2)。若d 为行向量,则length(d )必须等于size(x,1)与size(y,1)。

(2)fill(x,y,ColorSpec):用ColorSpec指定的颜色填充由x与y定义的多边形,其中ColorSpec可以为颜色:'r'、'g'、'b'、'c'、'm'、'y'、'w'、'k'。

(3)fill(x1,y1,c1,x2,y2,c2):一次定义多个要填充的二维区域。

(4)fill(…, 'PropertyName',PropertyValue):允许用户定义组成fill多边形的patch图形对象某个属性名称的属性值。

(5)h=fill(…):返回patch图形对象句柄值的向量,并且每一个patch对象对应一个句柄值。

(6)hold:可以切换当前的绘图叠加模式。

(7)hold on或hold off:表示明确制定当前绘图窗口叠加绘图模式的开关状态。

(8)hold all:不但实现hold on的功能,使当前绘图窗口的叠加绘图模式打开,而且使新的绘图指令依然循环初始设置的颜色循环序和线型循环序。

【例2-15】利用fill函数绘制一个七角形。

t=(1/14:1/7:1)'*2*pi; %定义七角形的刻度
x=sin(t);y=cos(t);
H=fill(x,y,'r');
axis square

运行结果如图2-16所示。

screenshot

【例2-16】利用函数hold绘制叠加图形。

x=-5:5;
y1=randn(size(x));
y2=sin(x);
subplot(2,1,1)
plot(x,y1,'b')
plot(x,y2,'r')  %新的绘图指令冲掉了原来的绘图结果
subplot(2,1,2)
plot(x,y1,'b')
hold       %新的绘图结果叠加在原来的图形中

运行结果如图2-17所示。

screenshot

5.text函数与gtext函数
text函数用于在当前轴中创建text对象,函数text是创建text图形句柄的低级函数,可用该函数在图形中指定的位置上显示字符串;gtext函数用于在当前二维图形中用鼠标放置文字,当光标进入图形窗口时,会变成一个大十字,表明系统正等待用户的动作。这些函数的用法如下。

(1)text(x,y,'string'):表示在图形中指定的位置(x,y)上显示字符串string。

(2)text(x,y,string,option):主要功能是在图形指定坐标位置(x,y)处,写出由string所给出的字符串。坐标(x,y)的单位是由选项参数option决定的。如果不给出该选项参数,则(x,y)坐标的单位与图中的单位是一致的。如果选项参数取为'sc',则(x,y)坐标表示规范化的窗口相对坐标,其变化范围为0~1,即该窗口绘图范围的左下角坐标为(0,0)、右上角坐标为(1,1)。

(3)gtext('string'):表示当光标位于一个图形窗口内时,等待用户单击鼠标或键盘。若按下鼠标或键盘,则在光标的位置放置给定的文字“string”。

【例2-17】利用函数text将文本字符串放置在图形中的任意位置。

x=0:pi/100:6;
plot(x,sin(x));
text(3*pi/4,sin(3*pi/4),'\leftarrowsin(x)=0.707','fontsize',14);  %放置文本字符串
text(pi,sin(pi),'\leftarrowsin(x)=0','fontsize',14);
text(5*pi/4,sin(5*pi/4),'sin(x)=-0.707\rightarrow','horizontal','right','fontsize',14);

运行结果如图2-18所示。

screenshot

【例2-18】使用函数gtext可以将一个字符串放到图形中,位置由鼠标来确定。

plot(peaks(80));
gtext('图形','fontsize',16)

运行结果如图2-19所示。

screenshot

2.1.4 特殊二维图形的绘制
与数值计算和符号计算相比,图形的可视化技术是数学计算人员所追求的更高级的一种技术,因为对于数值计算和符号计算来说,不管计算的结果是多么的准确,人们往往无法直接从大量的数据和符号中体会它们的具体含义。

1.特殊坐标系的二维图形函数
(1)semilogx函数用于对x轴按对数比例绘数据图,其他与plot函数类似。

【例2-19】semilogx函数示例一。

y=0:0.1:1;
semilogx(y,'+'); %

令x轴为以10为底的对数比例(即坐标轴按照相等的指数变化来增加,每个单位为101)、y轴为线性比例绘数据图,当y为实数向量时,则绘制y的元素与它们的指数之间的数据图。

运行结果如图2-20所示。

screenshot

【例2-20】semilogx函数示例二。

x=1:0.1*pi:2*pi;
y=sin(x);
semilogx(x,y,'*');

运行结果如图2-21所示。

screenshot

(2)semilogy函数与semilogx函数正好相反,它是对y轴按对数比例绘数据图。

【例2-21】semilogy函数示例。

x=0:0.1:10;
semilogy(x,10.^x);

运行结果如图2-22所示。

screenshot

(3)loglog函数用于对x轴和y轴都按对数比例绘数据图。

【例2-22】loglog函数的用法举例。

x=logspace(-3,3);
loglog(x,exp(x), 'o');
grid on

运行结果如图2-23所示。

screenshot

(4)ploar函数用于绘制极坐标系下的二维图形,调用格式为:

polar(theta,rho,s)

其中,theta为弧度表示的角度向量,rho是相应的幅向量,s为图形属性设置选项。

【例2-23】polar函数的用法举例。

x=0:0.01*pi:4*pi;
y=sin(x/2)+x;
polar(x,y,'-');

运行结果如图2-24所示。

screenshot

在进行数值比较过程中经常会遇到双纵坐标(双y轴坐标系)显示的要求,解决该问题,可调用plotyy函数。完整调用格式为:

plotyy(x1,y1,x2,y2,fun1,fun2)

该命令将以fun1方式绘制(x1,y1),以fun2方式绘制(x2,y2)。其中,省略参数fun1和fun2时,以plot方式绘制图形;省略参数fun2时,以fun1方式绘制图形(fun1可以为plot、semilogx、semilogy等)。

【例2-24】利用plotyy产生两个y轴指定一种数据的两种不同显示形式。

t=0:pi/30:6;
y=exp(cos(t));
plotyy(t,y,t,y,'plot','stem')

运行结果如图2-25所示。

screenshot

【例2-25】利用plotyy函数在同一个图中绘制两组不同的数据。

t=0:800;A=900;a=0.004;b=0.004;
z1=A*exp(-a*t);
z2=cos(b*t);
plotyy(t,z1,t,z2,'semilogy','plot')

运行结果如图2-26所示。

screenshot

2.特殊二维图形函数
(1)条形图、水平条形图:bar(x,y) 在x中指定的位置上绘y中每一元素的条形。

【例2-26】绘制垂直和水平直方图。

clear all;
bar (rand(1,10))

运行结果如图2-27所示。

screenshot

【例2-27】绘制矩阵的直方图。

x=-2:0.1:2;
Y=exp(-x.*x);
bar(x,Y)

运行结果如图2-28所示。

screenshot

【例2-28】创建4个次级图形,显示不同条形变量的效果。

y=round(rand(5,3)*10);
subplot(2,2,1);

bar(y,'group');%'group'用于显示5组条形组,每个条形组中有3个垂直条形
subplot(2,2,2);
bar(y,'stack');%为y中的每一行显示一个条形,条形高度为行中元素的和,每一个条形都用多种颜色
       %表示,颜色对应于不同种类的元素并显示每行元素对总和的相对贡献

subplot(2,2,3);
barh(y,'stack');
subplot(2,2,4);
bar(y,1.5);

运行结果如图2-29所示。

screenshot

(2)面积图将向量(或矩阵)y 中的元素显示为一条或多条曲线,并填充每条曲线以下的面积。当y 为矩阵时,曲线堆栈,显示每个x区间内每行元素对曲线总高度的贡献。绘制面积图通过调用area函数实现,调用格式为:

area(x,y,ymin)

绘x 对应点处y 数据的图。如果x 为一向量,则length(x )必须等于length(y ),x 必须是单调的。如果x 为一矩阵,则size(x )必须等于size(y ),且x 的每一列必须是单调的。使用sort可以使向量或矩阵单调化。对于面积填充,ymin为指定方向上的下限,省略参数ymin时,ymin默认为0。省略x 时,绘y 向量图或y 矩阵每列的和,x 自动根据length(y )(当y 为向量时)或size(y,1)(当y 为矩阵时)确定比例。

【例2-29】用area函数根据矢量或矩阵的各列生产一个区域图。

X=magic(6);
area(X)

运行结果如图2-30所示。

screenshot

(3)饼图显示某向量或矩阵中各元素所占的比例。pie函数和pie3函数分别创建二维饼图和三维饼图,pie函数的调用格式为:

pie(x,explode):

explode为与x 对应的零或非零矩阵,非零值对应的扇区将从饼图中分离,所以,若explode(i,j)非零,则x (i,j)对应扇区从中心分离(注意:explode必须与x 有相同的大小)。省略参数explode时,使用x 中的数据绘制饼图,x 中的每一个元素用饼图中的一个扇区表示。

【例2-30】利用pie(x)为x里的数据绘制一张饼图。

x=[4 3 8 2 1 7 5];
explode=[0 0 0 0 1 1 0];
pie(x,explode)

运行结果如图2-31所示。

screenshot

(4)误差条图显示数据的置信区间或沿曲线的偏差,误差条图通过调用errorbar函数来绘制,调用格式有以下3种。

① errorbar(Y,E):对Y 绘图并在Y的每个元素处绘一个误差条,误差条两端距离曲线上下均为E(i)长度。

② errorbar(X,Y,E):绘X 和Y 的误差条图,误差条长度为2*E(i),其中X、Y和E必须大小相同。当它们为向量时,每个误差条均由(X(i),Y(i))定义,曲线上点上下各为E(i)误差条。当它们为矩阵时,每个误差条则由(X(i,j),Y(i,j))定义。

③ errorbar(X,Y,L,U):用由L(i)+U (i) 指定了的误差条上下长度绘制误差条图,其中,X、Y、L和U必须大小相同。当它们为向量时,每个误差条由(X(i),Y(i))定义,用L(i)定义下面的距离,用U(i)定义上面的距离。当它们为矩阵时,每个误差条由(X(i,j),Y(i,j))定义,用L(i,j)定义下面的距离,用U(i,j)定义上面的距离。

【例2-31】利用errorbar函数来表示已知资料的误差值。

x=linspace(0,2*pi,30);
y=cos(x);
e=std(y)*ones(size(x)) %标准差
errorbar(x,y,e)

运行结果如下。

e =
 Columns 1 through 13
  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303
 Columns 14 through 26
  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303  0.7303
 Columns 27 through 30
 0.7303  0.7303  0.7303  0.7303

运行效果图如图2-32所示。

screenshot

(5)在统计中,为了掌握数据的分布特征,需要绘制直方图,绘制直方图可通过调用函数hist函数来实现,调用格式有以下3种。

① n=hist(Y ):将Y 中的元素分到10个间隔相同的条形中,并返回每个条形中元素的个数。若Y 是矩阵,则hist函数对每一列生成直方图。

② n=hist(Y,x):其中x为向量,返回Y 的分布。例如,x为一个5元素的向量,则hist函数将Y 中的元素分配到5组条形中。

③ n=hist(Y,nbins):其中,nbins为标量,使用nbins组条形。

直方图的x轴反映Y 中值的范围,直方图的y轴显示落到组中的元素个数。所以,在任意条形组中,y轴包含0到最大元素个数的范围。

直方图用添加阴影的图形对象创建,若希望改变图形的颜色,可以设置阴影属性。

【例2-32】创建服从高斯分布的数据的钟形直方图。

x=-2.9:0.1:2.9;
y=randn(10000,1);
hist(y,x); 
%改变图形的颜色,使得条形为红色,条形的边为白色
h=findobj(gca,'Type','patch');
set(h,'FaceColor','r','EdgeColor','w');

运行结果如图2-33所示。

screenshot

(6)contour函数用于绘制等高线图,其调用格式为:

contour(Z,N/V)
contour(X,Y,Z,N/V)

其中,输入变量Z 必须为一个数值矩阵,是该函数必须输入的变量,可以将其理解为x-y平面的高度。变量N/V 为可选输入变量,参数N 为所绘图形等高线的条数,即按指定数目绘制等高线;也可以选择输入参数V(这里,V 为一个数值向量),等高线的条数将为向量V 的长度,并且等高线的值为对应向量的元素值。如果没有选择,系统将自动为矩阵Z 绘制等高线图,其等高线条数为预设值。如果按后一种方式调用,X 和Y 指定x轴和y轴的范围。当X 和Y 为矩阵时,它们必须与Z 具有相同的大小。

【例2-33】在范围-2

[x,y]=meshgrid(-2:0.2:2,-2:0.2:3);
z=x.*exp(-x.^2-y.^2);
[c,h]=contour(x,y,z);
clabel(c,h);    %作等高线图的等高标签
colormap cool;    %对上面的函数和范围,设置等高线水平为20,设置默认颜色,生成等高线图
contour(x,y,z,20);

运行结果如图2-34所示。

screenshot

相关文章
|
6月前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
6月前
Matlab绘制图形
Matlab绘制图形
49 0
|
28天前
|
存储 数据可视化 数据挖掘
使用Matlab绘制简单的二维与三维图形
【10月更文挑战第3天】本文详细介绍了如何在 Matlab 中绘制简单的二维和三维图形,包括曲线图、柱状图、散点图、网格图、表面图、等高线图、多边形填充图、切片图及矢量场等。文章提供了丰富的代码示例,如使用 `plot`、`bar`、`scatter`、`plot3`、`mesh`、`surf`、`contour` 等函数绘制不同类型图形的方法,并介绍了 `rotate3d`、`comet3` 和 `movie` 等工具实现图形的交互和动画效果。通过这些示例,读者可以轻松掌握 Matlab 的绘图技巧,并应用于数据可视化和分析中。
35 6
|
3月前
|
计算机视觉
【图像处理】基于灰度矩的亚像素边缘检测方法理论及MATLAB实现
基于灰度矩的亚像素边缘检测方法,包括理论基础和MATLAB实现,通过计算图像的灰度矩来精确定位边缘位置,并提供了详细的MATLAB代码和实验结果图。
87 6
|
3月前
|
计算机视觉
【图像处理】基于Zernike矩的亚像素边缘检测理论及MATLAB实现
基于Zernike矩的亚像素边缘检测理论,并提供了相应的MATLAB代码实现,包括定义7x7的Zernike模板、图像处理、边缘检测和连通域分析等步骤。
105 1
|
3月前
matlab绘图之plot使用
matlab绘图之plot使用
26 0
|
6月前
|
算法 数据安全/隐私保护 C++
基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
该内容是关于一个图像水印算法的描述。在MATLAB2022a中运行,算法包括水印的嵌入和提取。首先,RGB图像转换为YUV格式,然后水印通过特定规则嵌入到Y分量中,并经过Arnold置乱增强安全性。水印提取时,经过逆过程恢复,使用了二维CS-SCHT变换和噪声对比度(NC)计算来评估水印的鲁棒性。代码中展示了从RGB到YUV的转换、水印嵌入、JPEG压缩攻击模拟以及水印提取的步骤。
|
5月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
50 0
|
5月前
|
数据处理
MATLAB 论文绘图规范标注
MATLAB 论文绘图规范标注
|
6月前
|
算法 计算机视觉
基于表面法线法的二维人脸图构建三维人脸模型matlab仿真
该内容概述了一个使用MATLAB2022a的二维人脸图像三维重建算法。首先,通过人脸检测和对齐,然后运用深度信息估计技术(如Shape from Shading)获取表面法线。接着,结合预训练的三维人脸模型库和二维关键点,通过迭代优化和全局优化构建三维模型。核心程序涉及图像处理、光源方向转换、反射率和表面法线计算,最终重构高度图并显示结果。该方法依赖多视角图像,单幅图像重建可能存在挑战。

热门文章

最新文章