matlab三维feather,matlab高维图形,别地方抄来的

不知道能不能用上,先留着。

7.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 2

Y =

3 5 2 4 1

3 4 5 2 1

5 4 3 2 5

Cum_Sum =

3 5 2 4 1

6 9 7 6 2

11 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*pi

t=[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 cool

xlabel('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 square

fill(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,clf

zeta2=[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];endS=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 变换的幅频。本例左图用极坐标指令

polar 绘出,右图用三维离散杆图指令 stem3

绘出。

MATLAB

的 polar 指令是建筑在 plot 基础上的。指令执行后,出现的极坐标轴及分度标识也是由 plot

以一种“固定”模式产生的。因此,极坐标轴的控制很不灵活,它只能以比较简单的方式表达函数。如对于本例左图,那图形小、线条细、文字太密的缺陷,就较难克服。相比而言,先借助极坐标和直角坐标转换,然后再通过直角坐标图形指令加以表现,往往更显灵活、方便。如本例的右图。

th = (0:127)/128*2*pi; % 角度采样点

rho=ones(size(th)); % 单位半径

x = cos(th);y = sin(th);

f = abs(fft(ones(10,1),128)); % 对离散方波进行 FFT 变换,并取幅值。

rho=ones(size(th))+f'; % 取单位圆为绘制幅频谱的基准。

subplot(1,2,1),polar(th,rho,'r')

subplot(1,2,2),stem3(x,y,f','d','fill') % 取菱形离散杆头,并填色。

view([-65 30]) % 控制角度,为表现效果。

图 7.4.1 .8-1 离散方波的幅频谱

7.4.1.9 二维半图指令pcolor, contour, contourf

【 * 例 7.4.1 .9-1 】本例重点演示所谓“二维半”指令:伪彩图 pcolor

;等位线指令 contour 、 contourf

;等位线标高指令 clabel 的配合使用和区别。练习本例时注意:( 1 )本例等位线指令中的第 4

输入宗量 n 设定高度的等级数,第 5 输入宗量设定等位线的线型、色彩。( 2 )左右两图的标高方法不同。左图的标识以“ +

”引导,水平放置。右图沿线布置。这是由 clabel 的调用格式不同产生的。( 3

)左右两图色彩的形成方法不同,色彩效果也不同。( 4 )在左图中, colorbar

画出一根垂直色标尺,而 caxis 决定该色标尺的刻度。

clf;clear;[X,Y,Z]=peaks(40); % 获得 peaks 图形数据

n=4; % 等高线分级数

subplot(1,2,1),pcolor(X,Y,Z) % 伪彩图

colormap jet,shading interp

hold on,C=contour(X,Y,Z,n,'k:'); % 用黑虚线画等位线,并给出标识数据。

clabel(C) % 随机标识法

zmax=max(max(Z));zmin=min(min(Z));caxis([zmin,zmax]) %

决定色标尺的范围

colorbar % 画垂直色标尺

hold off,subplot(1,2,2)

[C,h,CF]=contourf(X,Y,Z,n,'k:'); % 用黑虚线画填色等位线,并给出标识数据。

clabel(C,h) % 沿线标识法

图 7.4.1 .9-1 “二维半”指令的演示

7.4.1.10 散点图scatter , scatter3 , plotmatrix

【 * 例 7.4.1 .10-1 】表现函数 。请注意本例中的 3 个指令:( 1 )散点图指令

scatter3 ,标志三维数据点。它的前三个输入宗量必须是同长的向量,如指令

<5> 。( 2 )带垂帘的网线图指令

meshz ,它的调用格式与 mesh 没有什么不同。此外,再次提醒读者注意指令

<2> 。这样处理的目的是避免 0/0

的不定性。该处理方法是求极限的一种数值方法。

x=3*pi*(-1:0.2:1);y=x;[X,Y]=meshgrid(x,y);

R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R;% 引入 eps 避免 0/0 ,

%<2>

C=abs(del2(Z)); % 求“五点格式”差分,反映曲面变化。

meshz(X,Y,Z,C) % 由曲面变化决定用色

hold on,scatter3(X(:),Y(:),Z(:),'filled')

%<5>

hold off,colormap(hot)

图 7.4.1 .10-1 三维散点图

【 * 例 7.4.1 .10-2 】指令 plotmatrix 有两种基本调用方式:( 1

)对于数据矩阵 维的 X 和 维的 Y ,调用格式 plotmatrix(X,Y) 将画出一个分割成

个子散点图。其中第 个子散点图是根据 Y 第 列和 X 第 列数据画出的。( 2 )对于数据矩阵 维的 X ,调用格式

plotmatrix(X) 将画出分割成 个子块的图。该图的对角块,画出的是 X

每列的数据的频数直方图;而其他子块是相应列构成的散点图。该指令可用来观察数据矩阵(或同一矩阵列向量)间的统计关系。

randn('seed',1111),X=randn(100,2);Y=randn(100,2);

subplot(1,3,1),plotmatrix(X)

subplot(1,3,2),plotmatrix(X,X)

subplot(1,3,3),plotmatrix(X,Y)

图 7.4.1 .10-2 plotmatrix 表现数据统计特性

7.4.1.11 不规则数据的网线图和曲面图

【 * 例 7.4.1 .11-1 】用三角网线、曲面图表现函数 。

rand('seed',22),X=6*pi*(rand(20,10)-0.5);Y=6*pi*(rand(20,10)-0.5);

R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R;

tri=delaunay(X,Y); % 进行三角剖分

subplot(1,2,1),trimesh(tri,X,Y,Z)

subplot(1,2,2),trisurf(tri,X,Y,Z)

colormap(jet);brighten(0.5) % 增强亮度

图 7.4.1 .11-1 不规则数据的三维表现

7.4.1.12 泛函绘图指令fplot

【 * 例 7.4.1 .12-1 】 fplot 与一般绘图指令的绘图效果比较。

[x,y]=fplot('cos(tan(pi*x))',[-0.4,1.4],0.2e-3);n=length(x);

subplot(1,2,1),plot(x,y)

title('\fontsize{20}\fontname{ 隶书 } 泛函绘图指令效果 ')

t=(-0.4:1.8/n:1.4)';

subplot(1,2,2),plot(t,cos(tan(pi*t)))

title('\fontsize{20}\fontname{ 隶书 } 等分采样绘图 ')

图 7.4.1 .12-1 右图曲线中底部有明显绘图缺陷

7.4.2 四维表现

7.4.2.1 用色彩表现函数的特征

【 * 例 7.4.2 .1-1

】用色图阵表现函数的不同特征。演示:当三维网线图、曲面图的第四个输入宗量取一些特殊矩阵时,色彩就能表现或加强函数的某特征,如梯度、曲率、方向导数等。

x=3*pi*(-1:1/15:1);y=x;[X,Y]=meshgrid(x,y);

R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R;

[dzdx,dzdy]=gradient(Z);dzdr=sqrt(dzdx.^2+dzdy.^2); % 计算对 r

的全导数

dz2=del2(Z); % 计算曲率 <4>

subplot(1,2,1),surf(X,Y,Z),title('No. 1 surf(X,Y,Z)')

shading faceted,colorbar( 'horiz')

,brighten(0.2)subplot(1,2,2),surf(X,Y,Z,R),title('No.

2 surf(X,Y,Z,R)')

shading faceted;colorbar( 'horiz')

图 7.4.2 .1-1 色彩分别表现函数的高度和半径特征

clf;subplot(1,2,1),surf(X,Y,Z,dzdx)

shading faceted;brighten(0.1);colorbar(

'horiz')title('No. 3

surf(X,Y,Z,dzdx)')

subplot(1,2,2),surf(X,Y,Z,dzdy)

shading faceted;colorbar( 'horiz')title('No.

4 surf(X,Y,Z,dzdy)')

图 7.4.2 .1-2 色彩分别表现函数的 x 方向和 y 方向导数特征

subplot(1,2,1),surf(X,Y,Z,abs(dzdr))

shading faceted;brighten(0.6);colorbar(

'horiz')title('No. 5

surf(X,Y,Z,abs(dzdr))')

subplot(1,2,2),surf(X,Y,Z,abs(dz2))

%<17>

shading faceted;colorbar( 'horiz')title('No.

6 surf(X,Y,Z,abs(dz2))')

图 7.4.2 .1-3 色彩分别表现函数的径向导数和曲率特征

7.4.2.2 切片图和切片等位线图

【 * 例 7.4.2 .2-1 】利用 slice 和

contourslice 表现 MATLAB 提供的无限大水体中水下射流速度数据 flow 。

flow 是一组定义在三维空间上的函数数据。

在本例中,从图中的色标尺可知,深红色表示“正速度”(向图的左方),深蓝表示“负速度”(向图的右方)。

% 以下指令用切面上的色彩表现射流速度

clf;[X,Y,Z,V]=flow; % 取 4 个 的射流数据矩阵, V 是射流速度。

x1=min(min(min(X)));x2=max(max(max(X))); % 取 x 坐标上下限

y1=min(min(min(Y)));y2=max(max(max(Y))); % 取 y 坐标上下限

z1=min(min(min(Z)));z2=max(max(max(Z))); % 取 z 坐标上下限

sx=linspace(x1+1.2,x2,5); % 确定 5 个垂直 x 轴的切面坐标

sy=0; % 在 y=0 处,取垂直 y 轴的切面

sz=0; % 在 z=0 处,取垂直 z 轴的切面

slice(X,Y,Z,V,sx,sy,sz); % 画切片图

view([-12,30]);shading interp;colormap jet;axis off;colorbar

图 7.4.2 .2-1 切片图

% 以下指令用等位线表现射流速度

clf;v1=min(min(min(V)));v2=max(max(max(V))); % 射流速度上下限

cv=linspace(v1,v2,15); % 在射流上下限之间取 15 条等位线

contourslice(X,Y,Z,V,sx,sy,sz,cv);view([-12,30])

colormap jet;colorbar;box on

图 7.4.2 .2-2 切片等位线图

7.4.3 动态图形

7.4.3.1 彗星状轨迹图

【 * 例 7.4.3 .1-1 】简单二维示例。(请读者自己在指令窗中运行以下指令。)

shg;n=10;t=n*pi*(0:0.0005:1);x=sin(t);y=cos(t);

plot(x,y,'g');axis square;hold on

comet(x,y,0.01);hold off

【 * 例 7.4.3 .1- 2 】卫星返回地球的运动轨线示意。(请读者自己在指令窗中运行以下指令。)

shg;R0=1; % 以地球半径为一个单位

a=12*R0;b=9*R0;T0=2*pi; %T0 是轨道周期

T=5*T0;dt=pi/100;t=[0:dt:T]';

f=sqrt(a^2-b^2); % 地球与另一焦点的距离

th=12.5*pi/180; % 卫星轨道与 x-y 平面的倾角

E=exp(-t/20); % 轨道收缩率

x=E.*(a*cos(t)-f);y=E.*(b*cos(th)*sin(t));z=E.*(b*sin(th)*sin(t));

plot3(x,y,z,'g') % 画全程轨线

[X,Y,Z]=sphere(30);X=R0*X;Y=R0*Y;Z=R0*Z; % 获得单位球坐标

grid on,hold on,surf(X,Y,Z),shading interp % 画地球

x1=-18*R0;x2=6*R0;y1=-12*R0;y2=12*R0;z1=-6*R0;z2=6*R0;

axis([x1 x2 y1 y2 z1 z2]) % 确定坐标范围

view([117 37]),comet3(x,y,z,0.02),hold off % 设视角、画运动轨线

图 7.4.3 .1-1 卫星返回地球轨线示意

7.4.3.2 色图的变幻

【例 7.4.3 .2-1 】色彩变幻(因印刷关系,无法表现。请读者自己在指令窗中运行以下指令。注意:在 256

色情况下,才可被正确执行)

peaks

spinmap

7.4.3.3 影片动画

【 * 例 7.4.3 .3-1 】三维图形的影片动画。(因印刷关系,无法表现本例。请读者自己在指令窗中运行以下指令。)

clf;shg,x=3*pi*(-1:0.05:1);y=x;[X,Y]=meshgrid(x,y);

R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R;

h=surf(X,Y,Z);colormap(jet);axis off

n=12;mmm=moviein(n); % 预设画面矩阵。新版完全可以取消此指令 。

for i=1:n

rotate(h,[0 0 1],25); % 是图形绕 z 轴旋转 25 度 / 每次

mmm(:,i)=getframe; % 捕获画面。新版改为 mmm(i)=getframe 。

end

movie(mmm,5,10) % 以每秒 10 帧速度,重复播放 5 次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值