Octave 教程:繪圖
本內容將介紹在 Octave 中繪製圖形。
一、繪製基本圖形
1.1 簡單繪圖
在 Octave 中繪製函式圖形的步驟如下:
- 先定義變數 ,指定變數 值的取值範圍;
- 然後定義函式 ;
- 最後呼叫 plot 命令,如 plot(x, y)。
例子:繪製函式 。在 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 的
繪製出來的圖形比 增量為 20 為
的圖形更加平滑。所以減少增量,能夠繪製出更加平滑的圖形。
上面我們用到了 hold on
,它的作用是:將新影象畫在舊影象上面,而不是覆蓋舊影象。如果將上面程式碼中的 hold on
刪除,最終只會顯示
的圖形。
1.2 在圖形中新增標題,標籤,網格線
我們可以在圖形中新增標題,為 x 軸和 y 軸新增標籤,顯示網格線等。相關命令說明如下:
xlabel
和ylabel
命令新增 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');
執行以上程式碼,將繪製出如下圖形:
三、繪製等高線圖
生成的等高線圖,顯示了對於一個給定的功能的輪廓線
。這個函式有兩個變數,因此,我們將生成兩個獨立的變數,即兩個資料集
和
,通過呼叫 meshgrid
命令實現。
meshgrid
命令是用於產生一個矩陣的元素,賦予
和
的範圍內進行了在每一種情況下的增量同規格一起。
例子:繪製
的等高線,在 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);
執行以上程式碼,將繪製出如下圖形:
四、繪製三維圖
三維圖顯示有兩個自變數的函式的表面,
。
首先使用 meshgrid
命令建立一組
;然後,設定輸入函式;最後使用 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] 吳恩達《機器學習》課程