1. 程式人生 > >Octave 教程:繪圖

Octave 教程:繪圖

  本內容將介紹在 Octave 中繪製圖形。

一、繪製基本圖形

1.1 簡單繪圖

  在 Octave 中繪製函式圖形的步驟如下:

  • 先定義變數 x x ,指定變數 x x
    值的取值範圍;
  • 然後定義函式 y = f ( x ) y = f(x)
  • 最後呼叫 plot 命令,如 plot(x, y)。

  例子:繪製函式 y = x 2 y = x^2 。在 Octave 中輸入以下程式碼:

x1 = [-100: 20: 100];  % x1 的取值範圍是(-100,100),增量為 20
y1 = x1.^2;            % y1 = x1*x1
plot(x1, y1);
hold on;
x2 = [-100: 5: 100];   % x2 的取值範圍是(-100,100),增量為 5
y2 = x2.^2 + 2000;     % y2 = x2*x2 + 2000
plot(x2, y2);

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述
  我們可以看到增量為 5 的 x 2 x2 繪製出來的圖形比 增量為 20 為 x 1 x1 的圖形更加平滑。所以減少增量,能夠繪製出更加平滑的圖形
  上面我們用到了 hold on,它的作用是:將新影象畫在舊影象上面,而不是覆蓋舊影象。如果將上面程式碼中的 hold on 刪除,最終只會顯示 y 2 = ( x 2 ) 2 + 2000 y2 = (x2)^2+2000 的圖形。

1.2 在圖形中新增標題,標籤,網格線

  我們可以在圖形中新增標題,為 x 軸和 y 軸新增標籤,顯示網格線等。相關命令說明如下:

  • xlabelylabel 命令新增 x 軸和 y 軸的標籤。
  • 標題命令(title)新增標題。
  • 網格命令(grid on)顯示網格線。
  • 軸等於命令(axis equal)允許生成與同等規模因素和空間兩個座標軸上的積點。
  • 軸方形命令生成一個正方形的積點。

  在 Octave 中輸入以下程式碼:

x = [0: 0.01: 10];
y = sin(x);
plot(x, y);
xlabel('x');             % 新增 x 軸標籤
ylabel('Sin(x)');        % 新增 y 軸標籤
title('Sin(x) Graph');   % 新增標題
grid on;                 % 顯示網格線
axis equal;

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

1.3 在同一張圖中繪製多個函式

  在 Octave 中輸入以下程式碼:

x = [0: 0.01: 10];
y = sin(x);
h = cos(x);
plot(x, y, x, h, '.-');
legend('Sin(x)', 'Cos(x)');

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述
  上面我們用到了 legend,它的作用是:在圖形中新增圖例。如果將上面程式碼中的 legend 語句刪除,上面圖形中右上角將不會顯示圖例。

1.4 在圖形上的顏色設定

  Octave 提供的基本顏色選項如下:

Color Code Color Code
White w Cyan c
Black k Green g
Blue b Magenta m
Red r Yellow y

  在 Octave 中輸入以下程式碼:

x = [0: 0.01: 10];
y = sin(x);
h = cos(x);
plot(x, y, 'r', x, h, 'g'); % 使用紅色繪製 y = sin(x) 的圖形,使用綠色繪製 y = cos(x) 的圖形
legend('Sin(x)', 'Cos(x)');

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

1.5 設定軸刻度

  通過 axis 命令可以設定軸的刻度,即設定 x 和 y 軸的最小值和最大值,使用方式如下:

axis([xmin xmax ymin ymax])

  在 Octave 中輸入以下程式碼:

x = [0: 0.01: 10];
y = exp(-x).*sin(2*x+3);
plot(x, y);
axis([0 10 -1 1]);

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

1.6 生成子圖

  使用 subplot 命令建立子圖,使用方式如下:

subplot(m, n, p)

其中,m 和 n 為積陣列的行數和列數(即將影象分割成 m*n 個格子),p 表示把當前圖形繪製在哪個子圖中(即使用第幾個格子繪製下面的圖形)。subplot 命令建立的每個圖形都可以有其自己的特點。
  在 Octave 中輸入以下程式碼:

x = [0: 0.01: 10];
y = sin(x);
% 在第 1 個格子中顯示 y=sin(x) 的圖形
subplot(1, 2, 1);
plot(x, y, 'b'), xlabel('x'), ylabel('sin(x)');
h = cos(x);
% 在第 2 個格子中顯示 y=cos(x) 的圖形
subplot(1, 2, 2);
plot(x, h, 'r'), xlabel('x'), ylabel('cos(x)');

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

1.7 其他一些命令

命令 說明
figure 給圖形標號
print -dpng ‘myPlot.png’ 儲存圖形,儲存圖形到 ‘myPlot.png’ 檔案中,儲存目錄為當前工作路徑。
close 關閉圖形
clf 清除圖形

二、繪製二維條形圖

  使用 bar 命令繪製二維條形圖。
  在 Octave 中輸入以下程式碼:

x = [1:10];
y = [75, 90, 87, 68, 50, 88, 78, 99, 60, 66];
bar(x, y), xlabel('Student'), ylabel('Score'), title('First Sem');

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

三、繪製等高線圖

  生成的等高線圖,顯示了對於一個給定的功能的輪廓線 g = f ( x , y ) g=f(x,y) 。這個函式有兩個變數,因此,我們將生成兩個獨立的變數,即兩個資料集 x x y y ,通過呼叫 meshgrid 命令實現。
  meshgrid 命令是用於產生一個矩陣的元素,賦予 x x y y 的範圍內進行了在每一種情況下的增量同規格一起。
  例子:繪製 g = x 2 + y 2 g=x^2+y^2 的等高線,在 Octave 中輸入以下程式碼:

[x, y] = meshgrid(-5: 0.1: 5, -3: 0.1: 3); %
g = x.^2 + y.^2;           % 函式 g
[C, h] = contour(x, y, g); % 繪製等高線圖
set(h, 'ShowText', 'on', 'TextStep', get(h, 'LevelStep')*2);

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

四、繪製三維圖

  三維圖顯示有兩個自變數的函式的表面, g = f ( x , y ) g=f(x,y)
  首先使用 meshgrid 命令建立一組 ( X , Y ) (X,Y) ;然後,設定輸入函式;最後使用 surf 命令繪製圖形。
  在 Octave 中輸入以下程式碼:

[x, y] = meshgrid(-2: .2: 2);
g = x .* exp(-x.^2 - y.^2);
surf(x, y, g);  % 繪製三維圖

執行以上程式碼,將繪製出如下圖形:
在這裡插入圖片描述

參考:
[1] https://www.w3cschool.cn/matlab/
[2] 吳恩達《機器學習》課程