Matlab 特殊图形和高维可视化2009-10-20 01:067.4 特殊图形和高维可视化7.4.1 特殊图形指令例示7.4.1.1 面域图area【* 例7.4.1 .1-1 】面域图指令area 。
该指令的特点是:在图上绘制多条曲线时,每条曲线(除第一条外)都是把“前”条曲线作基线,再取值绘制而成。
因此,该指令所画的图形,能醒目地反映各因素对最终结果的贡献份额。
注意:( 1 )area 的第一输入宗量是单调变化的自变量。
第二输入宗量是“各因素”的函数值矩阵,且每个“因素”的数据取列向量形式排放。
第三输入宗量是绘图的基准线值,只能取标量。
当基准值为0 (即以x 轴为基准线)时,第三输入宗量可以缺省。
(2 )本例第<4> 条指令书写格式x' , Y' ,强调沿列方向画各条曲线的事实。
clf;x=-2:2 % 注意:自变量要单调变化Y=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5] % 各因素的相对贡献份额Cum_Sum=cumsum(Y) % 各曲线在图上的绝对坐标area(x',Y',0) %<4>legend(' 因素A',' 因素B',' 因素C'),grid on,colormap(spring)x =-2 -1 0 1 2Y =3 5 24 13 4 5 2 15 4 3 2 5Cum_Sum =3 5 24 16 97 6 211 13 10 8 7图 7.4.1 .1-1 面域图表现各分量的贡献7.4.1.2 各种直方图bar, barh, bar3, bar3h【 * 例 7.4.1 .2-1 】二维直方图有两种图型:垂直直方图和水平直方图。
而每种图型又有两种表现模式:累计式:分组式。
本例选其两种加以表现。
x=-2:2; % 注意:自变量要单调变化Y=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5]; % 各因素的相对贡献份额subplot(1,2,1),bar(x',Y','stacked') % “累计式”直方图xlabel('x'),ylabel('\Sigma y'),colormap(cool)% 控制直方图的用色legend(' 因素 A',' 因素 B',' 因素 C')subplot(1,2,2),barh(x',Y','grouped') % “分组式”水平直方图xlabel('y'),ylabel('x')图 7.4.1 .2-1 二维直方图clf;x=-2:2; % 注意:自变量要单调变化Y=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5]; % 各因素的相对贡献份额subplot(1,2,1),bar3(x',Y',1) % “队列式”直方图xlabel(' 因素 ABC'),ylabel('x'),zlabel('y')colormap(summer) % 控制直方图的用色subplot(1,2,2),bar3h(x',Y','grouped') % “分组式”水平直方图ylabel('y'),zlabel('x')图 7.4.1 .2-2 三维直方图7.4.1.3 饼图pie, pie3【 * 例 7.4.1 .3-1 】饼图指令pie , pie3 用来表示各元素占总和的百分数。
该指令第二输入宗量为与第一宗量同长的 0-1 向量, 1 使对应扇块突出。
a=[1,1.6,1.2,0.8,2.1];subplot(1,2,1),pie(a,[1 0 1 0 0]),legend({'1','2','3','4','5'}) subplot(1,2,2),pie3(a,a==min(a)),colormap(cool)图 7.4.1 .3-1 饼形统计图7.4.1.4 填色图fill,fill3【 * 例 7.4.1 .4-1 】读者试验本例时,注意三点: MATLAB 画任意多边形的一种方法;保证绘图数据首尾重合,使勾画多边形封闭;使用图柄对图形的属性进行精细设置。
clf;n=10; % 多边形的边数dt=2*pi/n;t=0:dt:2*pit=[t,t(1)]; %fill 指令要求数据向量的首位重合,使图形封闭。
x=sin(t);y=cos(t);fill(x,y,'c');axis off % 画填色多边形,隐去坐标轴。
ht=text(0,0,'\fontname{ 隶书 }\fontsize{32} 十边形 ');% 文字注释,且得图柄。
set(ht,'Color','k','HorizontalAlignment','Center') % 依靠图柄设置属性。
图 7.4.1 .4-1 由 fiil 产生的填色多边形【例 7.4.1 .4-2 】三维填色指令fill3 演示。
注意:( 1 ) X,Y,Z 的相应列元素构成一个三维封闭多边形。
本例有 4 列,因此有 4 个多边形。
图7.4.1.4-2 中的“ 1 , 2 , 3 ,4 ” 号三角形分别由 X,Y,Z 的第 1 , 2 ,3 , 4 列生成。
( 2 )为使多边形封闭,每列的首尾元素应该重合。
若不重合,则将默认把最后一点与第一点相连,强行使多边形封闭。
( 3 )该指令的第 4 输入宗量可取定色单字符(如 'r' , 'g' 等),也可取与 X 同维的数值矩阵。
( 4 )所填色彩受 C 和色图的双重响应。
( 5 )本例图中三角形的编号是通过“图形窗”编辑而生成的。
X=[0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 1 1 0];Y=[0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 0 1 1];Z=[1 1 1 1;0 0 0 0;0 0 0 0];C=[1 0 0 1;0 1 0 1;0 0 1 0];fill3(X,Y,Z,C),view([-10 55]),colormap coolxlabel('x'),ylabel('y'),box on;grid on图 7.4.1 .4-2 三维填色7.4.1.5 射线图compass和羽毛图feather【 * 例 7.4.1 .5-1 】compass 和feather 指令的区别。
t=-pi/2:pi/12:pi/2; % 在区间,每取一点。
r=ones(size(t)); % 单位半径[x,y]=pol2cart(t,r); % 极坐标转化为直角坐标subplot(1,2,1),compass(x,y),title('Compass')subplot(1,2,2),feather(x,y),title('Feather')图 7.4.1 .5-1 compass 和 feather 指令的区别7.4.1.6 Voronoi图和三角剖分【 * 例 7.4.1 .6-1 】用 Voronoi 多边形勾画每个点的最近邻范围。
Voronoi 多边形在计算几何、模式识别中有重要应用。
从本例图 7.4.1.6-1 中,可以看到,三角形顶点所在多边形的三条公共边是剖分三角形边的垂直平分线。
clf;rand('state',111)n=30;A=rand(n,1)-0.5;B=rand(n,1)-0.5; % 产生 30 个随机点T=delaunay(A,B); % 求相邻三点组T=[T T(:,1)]; % 为使三点剖分三角形封闭而采取的措施voronoi(A,B) % 画 Voronoi 图hold on;axis squarefill(A(T(10, :)),B(T(10,:)),'y'); % 画一个剖分三角形voronoi(A,B) % 重画 Voronoi 图,避免线被覆盖。
图 7.4.1 .6-1 Voronoi 多边形和 Delaubay 三角剖分7.4.1.7 彩带图ribbon【 * 例 7.4.1 .7-1 】用彩带绘图指令ribbon ,绘制归化二阶系统在不同值时的阶跃响应,如图 7.4.1.7-1 所示。
对于本例程序,有以下几点值得注意:( 1 )程序中使用了 Control Toolbox 中的两个指令tf 和step 。
这tf 是一个( MATLAB5.x 版起用的)“对象”。
( 2 )本例构作的 S 是一个单输入 8 输出系统,作用于该 S 的 step 指令也将在一次调用中产生 8 个子系统的阶跃响应。
( 3 )在下段程序运行后,有兴趣的读者可显示 S ,以观察系统是如何描写的。
( 4 )本例为了得到较好的表现效果,采用了视角、明暗、色图、光照控制。
( 5 )为使程序有一定通用性,图例采用元胞数组生成。
( 6 )本例产生的图 7.4.1.7-1 中,除“ ”外,所有标识都是由下段指令产生的。
( 7 )“ ”中的斜向箭头无法由指令生成,而是直接通过“图形窗”编辑实现的( MATLAB5.3 版起用)。
( 8 )本例程序有通用性。
只要修改第 <2> 条指令对阻尼系数的设定,就可获得响应的彩带图形。
clear,clfzeta2=[0.1 0.2 0.3 0.4 0.5 0.6 0.8 1.0]; %<2>n=length(zeta2); for k=1:n;Num{k,1}=1;Den{k,1}=[1 2*zeta2(k) 1];end S=tf(Num,Den); % 产生单输入多输出系统t=(0:0.4:30)'; % 时间采样点[Y,x]=step(S,t); % 单输入多输出系统的响应tt=t*ones(size(zeta2)); % 为画彩带图,生成与函数值 Y 维数相同的时间矩阵。
ribbon(tt,Y,0.4) % 画彩带图% 至此彩带图已经生成。
以下指令都是为了使图形效果更好、标识更清楚而用。
view([150,50]),shading interp,colormap(jet)% 设置视角、明暗、色图light,lighting phong,box on % 设置光源、照射模式、坐标框for k=1:n;str_lgd{k,1}=num2str(zeta2(k));end,legend(str_lgd)% 图例设置str1='\itG = (s^{2} + 2\zetas + 1)^{-1}';str2='\fontsize{16}\fontname{ 隶书 } 取不同 ';str3='{\fontsize{10}\it\zeta}';str4='\fontsize{16}\fontname{ 隶书 } 时的阶跃响应 ';title([str1,str2,str3,str4]),zlabel('\ity(\zeta,t) \rightarrow')图 7.4.1 .7-1 二阶系统在不同阻尼系数时的响应7.4.1.8 离散杆图stem , stem3【 * 例 7.4.1 .8-1 】本例表现一个离散方波的快速 Fourier 变换的幅频。