MATLAB基础教程(11)——二维中的数据可视化(续)
目錄
今天目標:
畫一個圖像并且給圖像加上標題
子圖繪制
一些小知識
grid 設置框線
box 設置邊框
polar() 繪圖
今天小結
今天目標:
畫一個圖像并且給圖像加上標題
首先我們畫一張很簡單的圖形,比如就畫一個y = cos x 的圖像吧。
代碼如下:
%% 給圖形加上標題(這個我記得前面提過)syms x; % 聲明一個變量xx = 0:0.1:2*pi; % x的取值范圍,從0-2*pi,以0.1為分割取值y = cos(x); % 函數figure; % 打開繪圖窗口plot(y); % 畫出y,如果你想更改曲線形狀,可以參考第10講,比如% plot(y, 'o--c')如果我們想給這個圖形加上一個標題,我們只需要使用?title()?即可:
代碼如下:
%% 給圖形加上標題(這個我記得前面提過)syms x; % 聲明一個變量xx = 0:0.1:2*pi; % x的取值范圍,從0-2*pi,以0.1為分割取值y = cos(x); % 函數figure; % 打開繪圖窗口plot(y); % 畫出y,如果你想更改曲線形狀,可以參考第10講,比如% plot(y, 'o--c')title('余弦函數');猛一看,這個代碼很平常,好像平平無奇的,但是,請你仔細看plot的部分!!!!
有些同學可能依稀記得,我使用過?ploy(x, y)?去畫圖,可是今天我僅僅使用了?plot(y)?就把圖畫了出來,大家可以參考前面第十講:
這是為什么呢?如果大家都能認真想想再,相信大家都能發現問題所在。
額外知識:這個手型工具可以拖動圖像(坐標軸也會變化)
上面的圖像有一個很大的問題:請看圖像的橫坐標欄,如下圖(后一個圖是使用手型工具拖動第一個點到靠近橫坐標軸時的圖片):
或者我們也可以使用這個工具(學名是數據光標),來查看這個點的值:
?
咦~不對啊,為什么坐標軸是1-63呢?我的x的取值范圍不是0-2*pi嗎?
咦~你怎么知道是63而不是64呢?
我們看這個坐標軸,60+,我們能想到什么?
沒錯,我們的 x 是這樣定義的:x = 0:0.1:2*pi ,也就是說,x 看起來是連續的,實際上是間斷的(這個前面也講過咯),其實 x 的值是一個矩陣,里面存儲的分別是0 0.1 0.2 ...一直到2*pi這個數。而 2*pi 大概是6.28多一點點,所以最多到6.2就停止了,故 x 的值其實是這63個數據,而 y = cos x,實質上是相對于每一個 x 的值,計算cos的值,于是乎,當x = 0時,y = cosx => y = 1,以此類推,我們可以在工作區看到x y的真實的值:
如此,我們就可以知道 plot 的作用了。
plot 畫圖,如果只有一個參數,那么橫坐標就是1 2 3 .。。。。以此類推的,參數作為當橫坐標作為1 2 3 .。。時的值,對于 plot(y),我們就看到,當橫坐標是1 時,縱坐標取1(y = 1),當橫坐標是2時,縱坐標取0.9950(y = 0.9950)。。。。以此類推。
而如果有兩個參數時,第一個參數是橫坐標,第二個是縱坐標,兩個參數中的數值的量要相同,這樣就能對應畫圖,比如我們使用plot(x,y)和plot(y, x):
代碼如下:
%% 給圖形加上標題(這個我記得前面提過)syms x; % 聲明一個變量xx = 0:0.1:2*pi; % x的取值范圍,從0-2*pi,以0.1為分割取值y = cos(x); % 函數figure; % 打開繪圖窗口plot(x, y); % 畫出y,如果你想更改曲線形狀,可以參考第九講,比如% plot(y, 'o--c')title('plot(x, y)');figureplot(y, x);title('plot(y, x)');額外思考:如果plot的參數是三個呢?
如果你這個時候真的寫了下面的代碼:
%% plot里面三個參數的情況clear all;syms x;x = 0:0.1:2*pi;y = sin(x);z = cos(x);figure;plot(x, y, z);那么不出意外你的matlab應該會閃退了。
還記得我們上一講說,plot() 是可以設置函數曲線的點形狀、曲線樣式以及顏色的,其實,這個第三個參數需要是字符串(比如'x--c'):
代碼如下:
%% plot里面三個參數的情況clear all;syms x;x = 0:0.1:2*pi;y = sin(x);figure;plot(x, y, 'x--c');title('plot里面三個參數的情況');第三個參數的形狀設置上一講說過,我這里再把那個圖片復制過來了(不要忘記,這三個符號不區分前后順序。還有propertyname參數,其實沒啥用,這里提一下大家知道就行了,我們平常畫圖下面這個表應該夠用了,所以這里就不講了。)
如此,相信大家能很深刻的理解plot()的作用了。
子圖繪制
使用subplot() 可以將一個figure分為多個區塊,這是個很簡單的函數,看代碼:
%% 子圖繪制x = 0:0.1:2*pi; % 設置變量范圍y = sin(x); % 第一個函數z = cos(x); % 第二個函數figure; % 創建一個圖像畫板subplot(3, 2, 1); % 給圖像畫板分區為3行2列,選中第一個區域plot(x, y); % 在這個區域畫圖title('y = sin x'); % 這個區域的名字subplot(3, 2, 6); % 給繪圖花瓣分區為3行2列,選中第六個區域plot(x, z); % 繪制z = cosxtitle('z = cos x'); % 命名最后出現的圖像是這樣的:
額外的思考:如果我想畫兩張圖,且他們的分區方式不一樣的?我們是否可以畫不同圖時劃分區域形狀不同,選中不重疊的部分畫圖呢?讓我們試一試吧!
%% 子圖繪制x = 0:0.1:2*pi; % 設置變量范圍y = sin(x); % 第一個函數z = cos(x); % 第二個函數figure; % 創建一個圖像畫板subplot(2, 1, 1); % 給圖像畫板分區為2行1列,選中第一個區域,其實就是第一行plot(x, y); % 在這個區域畫圖title('y = sin x'); % 這個區域的名字subplot(2, 3, 6); % 給繪圖花瓣分區為2行3列,選中第六個區域plot(x, z); % 繪制z = cosxtitle('z = cos x'); % 命名下面是輸出的結果,看來是符合我們的預期的:
所以,我們劃分區域時,可以根據這個圖像的需求,靈活劃分,這個subplot只是邏輯上的劃分區域,并不是真的劃分了區域!!!!
一些小知識
grid 設置框線
grid on 開啟框線,這個默認是關閉的( grid off )
代碼如下:
%% 子圖繪制x = 0:0.1:2*pi; % 設置變量范圍y = sin(x); % 第一個函數z = cos(x); % 第二個函數figure; % 創建一個圖像畫板subplot(2, 1, 1); % 給圖像畫板分區為3行2列,選中第一個區域plot(x, y); % 在這個區域畫圖title('y = sin x'); % 這個區域的名字grid on; % 給這個區域設置框線subplot(2, 3, 6); % 給繪圖花瓣分區為2行3列,選中第六個區域plot(x, z); % 繪制z = cosxtitle('z = cos x'); % 命名
box 設置邊框
box off 關閉圖像的邊框,這個默認是打開的(box on),其實我感覺沒啥用,主要是為了臨界處方便觀察吧
代碼就如下:
%% 子圖繪制x = 0:0.1:2*pi; % 設置變量范圍y = sin(x); % 第一個函數z = cos(x); % 第二個函數figure; % 創建一個圖像畫板subplot(2, 1, 1); % 給圖像畫板分區為3行2列,選中第一個區域plot(x, y); % 在這個區域畫圖title('y = sin x'); % 這個區域的名字box off; % 給這個區域設置邊框關閉subplot(2, 3, 6); % 給繪圖花瓣分區為2行3列,選中第六個區域plot(x, z); % 繪制z = cosxtitle('z = cos x'); % 命名
polar() 繪圖
有些圖像只有極坐標形式,很難解出或者沒有直角坐標形式,所以需要用到極坐標系,極坐標畫圖參數和Plot()幾乎是一樣的,看一個例子吧:
代碼如下:
%% polar()x = 0:0.1:2*pi; % 設置變量范圍y = cos(x).^2+sin(x).^2;% 第一個函數,在matlab中,^ 表示乘方,不是異或。% 但是matlab中都是矩陣,所以需要在運算符前加一個 . ,表示矩陣中所有元素都平方% 我們都知道,z 就是圓的極坐標表示形式了。figure; % 創建一個圖像畫板subplot(2, 1, 1); % 給繪圖花瓣分區為2行1列,選中第一個區域polar(x, y); % 繪制y = cosxtitle('y = cos(x)^2+sin(x)^2'); % 命名% 分區是為了告訴大家,polar()也能在分區中操作
今天小結
今天學習了下面的內容:
- plot()畫圖和plot()到底怎么工作的
- matlab中一些小工具如數據光標的使用
- 畫極坐標
- 畫子圖
- 一些小函數
總結
以上是生活随笔為你收集整理的MATLAB基础教程(11)——二维中的数据可视化(续)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: passive模式 tcp_FTP主动模
- 下一篇: c语言备忘录算法矩阵链乘,矩阵链乘法(备