1. 程式人生 > >matlab的二維繪圖

matlab的二維繪圖

matlab繪製圖形的步驟為:

  1. 資料準備:產生自變數取樣向量,計算相應的函式值向量。
  2. 選定圖形視窗及子圖位置:在預設情況下,MATLAB系統繪製的圖形為figure(1).figure(2),...
  3. 呼叫繪製函式繪製圖形,例如plot函式
  4. 設定座標軸的範圍、刻度及座標網格
  5. 利用物件屬性值或圖形視窗工具欄設定線型、標記型別及其大小等
  6. 新增圖形註釋,例如圖名,座標名稱,圖例,文字說明等
  7. 圖形的匯出與列印

二維繪圖 

1.基本二維繪圖

  • plot函式
    • plot(Y):輸入引數Y是Y軸的資料,一般是輸入向量。若Y為複數,則等價於plot(real(Y),image(Y)).
    • plot(X1,Y1,...,Xn,Yn):
      • 若Xi,Yi均為實數向量,且為同維向量時,則plot先描出點(Xi,Yi)然後用直線依次相連
      • 若Xi,Yi均為複數向量,則不考慮虛數部分
      • 若Xi,Yi均為同型實數矩陣,則plot(Xi,Yi)依次畫出矩陣的幾條線段
      • 若Xi,Yi一個為向量,另一個為矩陣,且向量的維數等於矩陣的行數或列數,則矩陣按向量的方向分解為幾個向量,在與向量配對分別畫出。
    • plot(X1,Y1,LineSpec,...,Xn,Yn,LineSpec):LineSpec為選項字串,用於設定顏色、線性、資料點等。
    • plot(X1,Y1,LineSpec,'PropertyName',PropertyValue);PropertyName用於設定線的屬性值,顯得長度,寬度,標記點的顏色,大小等。
    • h = plot(X1,Y1,LineSpec,'PropertyName',PropertyValue'):返回繪製函式的控制代碼值h
  • 極座標軸函式
    • loglog函式用於繪製雙對數極座標軸影象
    • semilogx函式用於繪製對數x軸上的影象
    • semilogy函式用於繪製對數y軸上的影象
% 例2-1:利用plot繪製不同效果的圖形
x1 = -pi:.1:pi;
y1 = sin(x1);
subplot(2,3,1);plot(x1,y1);
title('plot繪製向量圖');

x2 = magic(8);
subplot(2,3,2);plot(x2);
title('plot繪製向量圖');

x3 = [3+2i,4+5i,5+7i,6+8i,7+9i,10+6i];
subplot(2,3,3);plot(x3);
title('plot繪製複數向量圖');

x4 = 0.01:0.3:2*pi;
y2 = cos(x4 + 0.5) + 2;
subplot(2,3,4);plot(x4,y2,'r-.*');
title('給圖形進行標識');

x5 = -pi:pi/10:pi;
y3 = tan(sin(x5)) - sin(tan(x5));
subplot(2,3,5);plot(x5,y3,'--rs','LineWidth',2,...
                        'MarkerEdgeColor','k',...
                        'MarkerFaceColor','g',...
                        'MarkerSize',10);
title('影象進行屬性設定');

x6 = -pi:pi/20:pi;
y4 = [sin(x6);sin(x6+1);sin(x6+2)];
z = [cos(x6);cos(x6+1);cos(x6+3)];
subplot(2,3,6);plot(x6,y4,'r:*',x6,z,'g-.v');
title('繪製多條曲線');

 

% 繪製對數座標及半對數座標圖
clear all;
x1 = logspace(-1,2);
subplot(1,3,1);loglog(x1,exp(x1),'-s');
title('loglog函式繪圖');
grid on;

x2 = 0:0.1:10;
subplot(1,3,2);semilogx(10.^x2,x2,'r-.*');
title('semilogx函式繪圖');

subplot(1,3,3);semilogy(10.^x2,x2,'rd');
title('semilogy函式繪圖');

 

2.格柵

當影象需要對具體數值更加清楚的展示時,為圖形新增格柵是十分有效的。

  • grid on:命令可以在當前圖形的單位標記處新增格柵
  • grid off:取消格柵的顯示
  • grid:單獨的grid,則可以在on與off狀態下交替轉換。
% 為圖形新增格柵
clear all;
x = linspace(0,10);
y = sin(x);
ax1 = subplot(2,1,1);
plot(x,y);
grid on;

y2 = sin(3*x);
ax2 = subplot(2,1,2);
plot(x,y2)
grid on;grid;

 

3.文字說明

  • title('text'):在影象視窗的頂端的中間位置輸出字串text作為標題
  • xlabel('text'):在x軸下的中間位置輸出字串text作為標註
  • ylabel('text'):在y軸邊上的中間位置輸出字串text作為標註
  • zlabel('text'):咋z軸邊上的中間位置輸出字串text作為標註
  • text(x,y,'text'):在圖形視窗(x,y)處寫字串text
  • gtext('text'):通過使用滑鼠或方向鍵,移動圖形視窗中的十字游標,讓使用者將字串text放置在圖形視窗中。
  • legend(str1,str2,...,pos):在當前圖形上新增圖例,並用說明性文字str1,str2等做標註。引數pos值位置引數。
  • legend off:清除圖例
clear all
x = (0:0.1:2*pi)';
y1 = 2 * exp(-0.5 * x) * [1,-1];
y2 = 2 * exp(-0.5 * x) .* sin(2 * pi * x);
x1 = (0:12)/2;
y3 = 2 * exp(-0.5 * x1) .* sin(2*pi*x1);
plot(x,y1,':',x,y2,'--',x1,y3)
title('曲線及其包絡線');
xlabel('變數X');ylabel('變數Y');
text(3.2,0.5,'包絡線');
text(0.5,0.5,'曲線y');
text(1.4,0.15,'離散資料點');
legend('包絡線','曲線y','離散資料點')

 

4.座標軸設定

matlab提供了座標軸控制函式axis。

  • axis([xmin xmax ymin ymax zmin zmax]):設定當前座標軸的x軸與y軸與z軸的範圍。
  • v = axis:返回一包含x軸,y軸與z軸對的刻度因子的行向量,v是一個四維或者六維的向量,取決於座標是二維還是三維的。
  • axis auto:自動計算當前軸的範圍。auto x:自動計算x軸的範圍。 auto y z:自動計算y軸與z軸的範圍。
  • axis manual:把座標固定在當前的範圍,如果保持狀態hold on,後面的圖形仍用相同的界限
  • axis tight:把座標軸的範圍定為資料的範圍,三個方向上的縱高比設為同一個值
  • axis fill:用於將座標軸的取值範圍分別設定為繪製所用資料在相應方向上的最大、最小值
  • axis ij:將二維圖形的座標原點設定在圖形視窗的左上角,座標軸i垂直向下,座標軸j水平向右
  • axis xy:使用笛卡兒座標系
  • axis equal:設定座標軸的縱橫比,使在每個方向的資料單位都相同
  • axis square:設定當前圖形為正方形,系統將調整x軸y軸和z軸,他們具有相同的長度。
  • axis vis3d:將凍結座標系此時的狀態,以便進行旋轉
  • axis normal:自用調整縱橫比,還用於填充圖形區域的,顯示與座標軸上的資料單位的縱橫比
  • axis off:關閉所有座標軸上的標記、格柵、和單位標記。保留由text和getext設定的物件
  • axis on:顯示座標軸上的單位、標記和格柵
  • [mode,visibility,direction] = axis('state'):返回表明當前座標軸的設定屬性的三個引數
clear all
t = 0.01:0.01:pi;
figure;
plot(sin(t),cos(t));
axis([-1 1 -2 2]) % 重新設定座標軸

 

5.影象迭繪

在已經存在的圖上繪製新的曲線,並保留原來的曲線。

hold on:是當前的軸及圖形保留下來而不被重新整理,並接受即將繪製的新的曲線

hold off:為不保留當前軸及圖形,繪製新的區先後,原圖被重新整理

hold:為hold on語句和hold off語句的切換

% 利用hold函式繪製迭繪圖形
clear all
x = -pi:pi/20:pi;
plot(sin(x),'r:>');
hold on
plot(cos(x),'b-<');
hold off

 

6.子圖繪製

matlab允許使用者在同一個圖形視窗中同時繪製多幅相互獨立的子圖,使用subplot函式。

  • subplot(m,n,p):將當前圖形視窗分成mxn個繪圖區,即m行n列。函式選定第p個分割槽為當前的活動區。在每一個區允許使用不同的座標系單獨繪製圖形。
  • subplot(m,n,p,'replace'):如果定義的座標軸已經存在,則刪除已經有的,並建立一個新的座標軸
  • subplot(m,n,p,'align'):對齊座標軸
  • subplot(h):使控制代碼h對應的座標軸為當前的,用於後面圖形的輸出展示
  • subplot('Position',[left bottom widthheight]):在指定的位置上建立座標軸
  • subplot(...,prop1,value1,prop2,value2,...):設定座標軸的屬性及屬性值
  • h = subplot(...):返回座標軸的控制代碼值h
% 利用subplot繪製子圖
clear all
x = 0:0.01*pi:pi*16;
j = sqrt(-1);
subplot(2,2,1);plot(abs(sin(x)) .* (cos(x) + j * sin(x)),'LineWidth',3);
xlim([-1 1]);ylim([-1 1]);
subplot(2,2,2);plot(abs(sin(x/2)) .* (cos(x) + j * sin(x)),'LineWidth',3);
xlim([-1 1]);ylim([-1 1]);
subplot(2,2,3);plot(abs(sin(x/3)) .* (cos(x) + j * sin(x)),'LineWidth',3);
xlim([-1 1]);ylim([-1 1]);
subplot(2,2,4);plot(abs(sin(x/4)) .* (cos(x) + j * sin(x)),'LineWidth',3);
xlim([-1 1]);ylim([-1 1]);

7.互動式繪圖

matlab中設定了相應的滑鼠操作的圖形操作指令,分別是ginput、gtext和zoom函式。

  • 除了ginput函式只能應用於二維圖形外,其餘兩個函式對二維和三維影象均適用
  • ginput函式和zoom函式配合使用,可以從圖形中獲得較為準確的資料
  • 在邏輯順序並不十分清晰的情況下,並不提倡這幾個指令同時使用

ginput函式:

用於互動式從matlab繪製的圖形中讀取點的座標。

  • [x,y] = ginput(n):用於互動式的通過滑鼠讀取圖形中的點,返回點的橫縱座標值。其中x為點的橫座標值,y為點的縱座標值,輸入引數n為選擇點的個數,可以按Enter鍵提前結束讀點操作
  • [x,y] = ginput:可以無限地讀取圖形中點的座標直到按下Enter鍵
  • [x,y,button] = ginput(...):button值返回讀點時的滑鼠操作,其中1代表按下滑鼠左鍵讀點,2代表按下滑鼠中鍵讀點,3代表按下滑鼠右鍵讀點。
clear all
x1 = 0:pi./100:2*pi;
plot(x1,cos(x1));
n = 10;
[x,y] = ginput(n);
>> x

x =

    0.8548
    1.3602
    2.6075
    3.9194
    5.0269
    5.3710
    4.6075
    4.2419
    2.0806
    2.7258

>> y

y =

    0.6479
    0.1887
   -0.8735
   -0.7335
    0.2977
    0.5856
   -0.1381
   -0.5272
   -0.3755
    0.2821

 

gtext函式: 

gtext用於為圖形新增互動式標記。

gtext('str'):用滑鼠把字串或字串元胞陣列放置到圖形中作為文字說明

clear all
x = -pi:.1:pi;
y = sin(x);
plot(x,y);
xlabel('x');ylabel('y');
gtext('y = sin(x)','fontsize',10) % 新增文字

 

zoom函式:

zoom函式可以將區域性影象進行放大。

  • zoom on:開啟互動式圖形放大功能
  • zoom off:關閉互動式圖形放大功能
  • zoom out:將系統返回非放大轉態,並將圖形恢復原狀
  • zoom reset:系統將記住當前圖形的放大狀態,作為放大狀態的設定值,當使用zoom out或雙擊滑鼠時,圖形並不是返回到原狀,而是返回reset時的放大狀態
  • zoom:用於切換放大係數,取值為on或off
  • zoom xon:只對x軸進行放大
  • zoom yon:只對y軸進行放大
  • zoom(factor):用放大係數factor進行放大或縮小,而不影響互動式放大的轉態。如果factor>1,則將系統圖形放大factor倍;如果0<factor<=1,則將系統圖形放大1/factor倍
  • zoom(fig,option):對視窗fig(不一定為當前視窗)中的二維圖形進行放大,其中引數option為on、off、xon、yon、reset、factor等
clear all
t = 0.01:0.01:2*pi;
figure;
subplot(2,2,1);plot(t,sin(t));
axis([-5 10 -3 3]); % 設定座標軸
title('放大前');
subplot(2,2,2);plot(t,sin(t));
axis([0 6 -1.5 1.5]);
zoom on; % 影象放大
title('放大後');
subplot(2,2,3);plot(t,sin(t));
axis([0 6 -3 3]);
zoom xon;
title('x軸方法');
subplot(2,2,4);plot(t,sin(t));
axis([-5 10 -1.5 1.5]);
zoom yon;
title('y軸放大');

8.雙座標軸繪製

在MATLAB中,提供了plotyy函式實現雙座標軸的繪製功能。

  • plotyy(x1,y1,x2,y2):在一個圖形視窗同時繪製兩條曲線(x1,y1)和(x2,y2),曲線(x1,y1)用左側的y軸,曲線(x2,y2)用右側的y軸
  • plotyy(x1,y1,x2,y2,fun):fun是字串格式,用來指定繪圖的函式名
  • plotyy(x1,y1,x2,y2,fun1,fun2):用兩種不同的函式分別繪製兩種曲線。
clear all
x = 0:0.01:20;
y1 = 200 * exp(-0.05 * x) .* sin(x);
y2 = 0.8 * exp(-0.5 * x) .* sin(10 * x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
xlabel('x');
set(get(AX(1),'Ylabel'),'String','慢衰減');
set(get(AX(2),'Ylabel'),'String','快衰減');
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

9.函式繪圖

如果只知道函式的表示式,也可以繪製該函式的圖形,函式fplot用於繪製一元函式的圖形,函式explot用於 繪製二元函式的圖形,函式ezploar用於繪製三元函式的圖形。

fplot函式:

fplot函式根據函式的表示式自動調整自變數的範圍,無須給函式賦值,直接生成或反映函式變化規律的圖形,在函式變化快的區域,採用小的間隔,否則採用大的間隔。一般用在對橫座標取值間隔沒有明確的要求,僅檢視函式大致變化規律的情況下使用。

  • fplot(fun,limits,tol,LineSpec):limit是指定的範圍,一般limit=[a,b,c,d],a,b為橫軸的上下限,c,d為縱軸的上下限。
  • fplot(fun,limits,n):當n>=1時,至少畫出n+1個點,最大步長不超過(xmax-xmin)/ n
  • [X,Y] = fplot(fun,limits,...):返回橫座標與縱座標的值給變數X和Y,此時fplot不畫出圖形。如需畫出圖形,即可使用plot(X,Y)語句
% 例2-12:利用fplot函式繪製f(x) = sin(tan(pi*x))
x = 0:0.01:1;
y = sin(tan(pi*x));
subplot(1,2,1);plot(x,y);
title('plot 函式繪圖');
subplot(1,2,2);fplot('sin(tan(pi*x))',[0,1],1e-4);
title('fplot 函式繪圖');

ezplot函式:

函式的表示式顯示在圖形的上方,同時對座標軸可以不加任何限制作圖。

  • ezplot(fum):繪製fun函式圖形
  • ezplot(fun,[min,max]):繪製函式fun(x)在區間[min,max]的圖形。
  • ezplot(fun2):繪製隱函式fun2=fun(x,y)的圖形,且fun(x,y)=0.
  • explot(fun2,[xmin,xmax,ymin,ymax]):繪製隱函式fun(x,y)=0在區間[xmin,xmax]和[ymin,ymax]區間上的圖形
  • ezplot(funx,funy):繪製引數方程x=funx,y=funy的函式圖形
subplot(2,1,1);
ezplot('cos(5 * t)','sin(3 * t)',[0,2 * pi])
grid on;
subplot(2,1,2);
ezplot('5 * x ^ 2 + 25 * y ^ 2 = 6',[-1.5,1.5,-1,1])
grid on;

 

10.二維特殊圖形

條形圖:

條形圖可以顯示適量資料和矩陣資料,如果使用者需要表示跨時間段的運算結果、不同資料的比較結果以及部分相對整體比較結果,常會用到條形圖繪製離散資料。

  • bar(Y)或barh(Y):繪製Y的條形圖
  • bar(x,Y)或barh(Y):在位置x上繪製Y的條形圖
  • bar(...,width)或barh(...,width):用width指定條形圖的寬度,預設值為0.8,如果大於1,那麼條與條之間將重合。
  • bar(...,'style')或barh(...,'style'):指定條形圖的繪製型別,style可以取值grouped或stacked.group為排列型,stacked為堆型條狀圖
  • bar(...'bar_color')或barh(...,'bar_color'):指定條形圖顏色
  • bar(...,'PropertyName',PropertyValue',...):指定條形圖的屬性名及屬性值。
  • h = bar(...)或h=barh(...):返回條形圖的控制代碼向量h
% 條形圖
Y = [0.5 0.7 0.8;0.7 0.8 0.4;0.4 0.3 0.9;0.3 0.6 0.9;0.2 0.1 0.6];
subplot(2,2,1)
bar(Y,'grouped'),title 'Group';
xlabel('銷售資料');ylabel('銷售直方圖')
subplot(2,2,2)
bar(Y,'stacked');title 'Stack'
xlabel('銷售資料');ylabel('銷售直方圖')
subplot(2,2,3)
barh(Y,'stacked');title 'Stack'
xlabel('銷售資料');ylabel('銷售直方圖')
subplot(2,2,4)
bar(Y,1.2);title 'Width = 1.2';
xlabel('銷售資料');ylabel('銷售直方圖')

餅形圖:

餅狀圖主要用於顯示矩陣中每個元素在所有元素總和中所佔的百分比及各部分之間的比例關係。

  • pie(X):X是向量,根據X中個分量所佔的百分比,繪製出相應比例,如果總和小於1,只會繪製部分圓
  • pie(X,explode):可以把指定的部分從圓形中抽取出來,explode為一個與X長度相同的向量,其中不為0的數所對應的分量,將被抽取出來。
  • pie(X,label):對每個分塊新增標註,labels為單元陣列,長度與X相同,只能是字串
  • pie(axes_handel,...):根據給定的控制代碼值繪製餅狀圖。
  • h = pie(...):返回圖形物件的控制代碼向量圖h
% 餅形圖
x = [0.15 0.2 0.25 0.35];
pie(x)

直方圖:

條形直方圖中的x軸反映了資料y中元素數值的範圍,直方圖的y軸顯示出引數y中的元素落入該組的數目

  • n = hist(Y):把Y按其中資料的大小分為10個長度相同的段,統計每段中的元素個數並返回給n,如果Y是矩陣,那麼按列分段。
  • n = hist(Y,x):輸入引數x是向量,以x的值為中心生成直方圖的各條。
  • n = hist(Y,nbins):輸入引數nbins是正整數,用來設定分段的個數
  • [n,xout] = hist(...):不繪製資料Y的直方圖,只返回反映每個條形圖中元素的向量與反映每個條形圖頻率的向量
  • hist(...):只繪製直方圖,不輸出引數
  • hist(...):只繪製直方圖,不輸入引數
  • hist(axes_handle,...):根據給定的控制代碼值axes_handle繪製直方圖。
% 直方圖
rand('state',1);
y = rand(100,1); % 生成待統計的資料
[n,x] = hist(y); % 返回統計頻數n和區域中心位置x
s(1) = subplot(1,3,1);
hist(y); % 繪製統計直方圖
xlabel('(a) hist(y)');
s(2) = subplot(1,3,2);
hist(y,7); % 繪製直方圖並指定區域數目
xlabel('(b) hist(y,7)');
s(3) = subplot(1,3,3);
hist(y,0:.1:1); % 繪製直方圖,並指定每個區域的中心位置
xlabel(' (x) hist(y,0:.1:1)');
axis(s,'square');
set(gcf,'Color','w');

散點圖:

散點圖將資料序列顯示為一組點,在迴歸分析中較為常用,放映了因變數隨自變數變化的趨勢,便於觀察兩者關係。

  • scatter(X,Y):繪製關於X和Y的散點圖,由於沒有設定散點圖的其他屬性,因此matlab採用預設的顏色和大小繪製資料點
  • scatter(X,Y,S,C);根據指定顏色C繪製散點圖
  • scatter(...,markertype):使用專門的標記型別o繪製散點圖。
  • scatter(...,'filled'):對標記進行填充
  • scatter(...,'PropertyName',propertyvalue):設定散點的屬性名及屬性值
  • h = scater(...):返回散點圖的控制代碼值。
% 散點圖
x = linspace(0,3 * pi, 200);
y = cos(x) + rand(1,200);
c = linspace(1,10,length(x));
scatter(x,y,[],x)

二維繪圖的基本內容應該都在這裡了,補充之間的繪圖內容,接下來還會有三維繪圖、四維繪圖。