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 次。
總結
以上是生活随笔為你收集整理的matlab三维feather,matlab高维图形,别地方抄来的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: buck电路matlab,buck变换器
- 下一篇: java高效遍历匹配,使用cypher或