更新:2024/09/30
Octaveで複数プロットとサブプロットの使用方法・例題について


はるか
Octaveで複数のグラフを同時に表示できるんだ。便利だね。

ふゅか
そうよ!例えば、\(\sin x\)と\(\cos x\)を同時にプロットしたり、サブプロットを使って別々に配置したりすることができるの!簡単で便利だね♪
目次
1. 複数のプロットとサブプロットについて
Octaveで複数プロットとサブプロットを使用することで、複数のグラフを同時に表示したり、1つのウィンドウに複数のグラフを配置することができます。以下でそれぞれの使い方を解説します。
2. 複数のプロットの使用方法

ふゅか
複数のプロットを1つのグラフに表示するのも簡単だよ。まず最初に「plot」で1つ目のグラフを描画して、次に「hold on」で別のグラフを追加できるようにしておけばOK♪

はるか
なるほど、hold onが大事ってことか。
複数のデータセットを1つのグラフに表示するには、plot
関数を複数回呼び出すか、hold on
とhold off
を使用して同じ図にプロットを追加します。
2.1. 複数のプロットを1つのグラフに表示
まず、$\sin x$と$\cos x$を一つのグラフにまとめると次のようになります。
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x, y1); % 1つ目のプロット (sin)
hold on; % 追加のプロットを許可
plot(x, y2); % 2つ目のプロット (cos)
hold off; % 追加のプロットを禁止
legend('sin(x)', 'cos(x)');
xlabel('x');
ylabel('y');
title('Sin and Cos Functions');
2.2. hold onを書かないと
$\sin x$のプロットの後に、hold onを書かないと、$\cos x$が描画されず次のようになります。
3. サブプロットの使用方法

はるか
サブプロットはウィンドウを分割する方法…具体的にはどうやるの?

ふゅか
例えば、2×2のレイアウトにすると4つのグラフが1つのウィンドウに収まるんだよ!「subplot(2, 2, 1)」みたいに指定すれば、その位置にプロットが配置されるの。
サブプロットを使用すると、1つのウィンドウに複数のグラフをレイアウトすることができます。subplot
関数を使って、ウィンドウを分割してそれぞれに別々のプロットを描画します。
3.1. サブプロットで複数のグラフを配置
$\sin x, \cos x.\tan x,e^{-x}$のグラフをウィンドウを分割して、プロットします。
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = tan(x);
y4 = exp(-x);
subplot(2, 2, 1); % 2x2のレイアウトの1つ目のプロット
plot(x, y1);
title('sin(x)');
subplot(2, 2, 2); % 2x2のレイアウトの2つ目のプロット
plot(x, y2);
title('cos(x)');
subplot(2, 2, 3); % 2x2のレイアウトの3つ目のプロット
plot(x, y3);
title('tan(x)');
subplot(2, 2, 4); % 2x2のレイアウトの4つ目のプロット
plot(x, y4);
title('exp(-x)');
3.2. サブプロット関数の構造
subplot(m, n, p)
は、以下のように使用します。
m
:行の数n
:列の数p
:プロットの位置(1から始まるインデックス)
この例では、2行2列のグリッドに4つのグラフを配置し、それぞれの位置にp
が1, 2, 3, 4と順番に指定されています。
3.3. 3×1のレイアウト
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = sin(2*x);
y4 = cos(2*x);
subplot(3, 1, 1); % 3行1列のレイアウトの1つ目のプロット
plot(x, y1);
title('sin(x)');
subplot(3, 1, 2); % 3行1列のレイアウトの2つ目のプロット
plot(x, y2);
title('cos(x)');
subplot(3, 1, 3); % 3行1列のレイアウトの3つ目のプロット
plot(x, y3);
title('sin(2x)');
この例では、3行1列のレイアウトに3つのグラフを縦に並べて表示しています。
3.4. まとめ
- 複数プロット:
hold on
とhold off
を使って1つのグラフに複数の曲線を描画できます。 - サブプロット:
subplot
関数を使って、1つのウィンドウに複数のグラフを配置できます。
4. 例題
4.1. 例題1: 複数の三角関数を1つのプロットに表示
次の関数をxの範囲で1つのグラフに重ねてプロットしてください。
- \( y_1 = \sin(x) \)
- \( y_2 = \sin(2x) \)
- \( y_3 = \sin\left(\frac{x}{2}\right) \)
% xの範囲を設定
x = linspace(0, 2*pi, 100);
% 関数定義
y1 = sin(x);
y2 = sin(2*x);
y3 = sin(x/2);
% 複数の関数を1つのグラフにプロット
plot(x, y1, 'r', 'DisplayName', 'sin(x)'); % 赤でsin(x)
hold on; % 次のプロットを同じグラフに追加
plot(x, y2, 'g', 'DisplayName', 'sin(2x)'); % 緑でsin(2x)
plot(x, y3, 'b', 'DisplayName', 'sin(x/2)'); % 青でsin(x/2)
% グラフのタイトルと軸ラベルを設定
title('Multiple Trigonometric Functions');
xlabel('x');
ylabel('y');
% 凡例を表示
legend;
% グリッドを追加
grid on;
hold off; % プロットの追加を終了
プログラムの流れについて説明します。
plot(x, y1, 'r')
で\( \sin(x) \)を赤色(’r’)でプロットします。hold on;
を使って、次のプロットを同じグラフに追加できるようにします。- \( \sin(2x) \)を緑色(’g’)、\( \sin\left(\frac{x}{2}\right) \)を青色(’b’)で同じグラフに追加します。
legend
で各関数の凡例を表示し、どの線がどの関数に対応しているかがわかるようにします。grid on;
でグリッドを表示し、グラフの可読性を向上させます。
これにより、複数の三角関数を1つのグラフに重ねて表示できます。
4.2. 例題2: 複数のべき乗関数をサブプロットで表示
次のべき乗関数をxの範囲でサブプロットを使って描画してください。
- \( y_1 = x^2 \)
- \( y_2 = x^3 \)
- \( y_3 = x^4 \)
% xの範囲を設定
x = linspace(-2, 2, 100);
% 関数定義
y1 = x.^2;
y2 = x.^3;
y3 = x.^4;
% サブプロット1: y1 = x^2
subplot(1, 3, 1); % 3行1列のサブプロットの1つ目
plot(x, y1);
title('y1 = x^2');
xlabel('x');
ylabel('y1');
% サブプロット2: y2 = x^3
subplot(1, 3, 2); % 3行1列のサブプロットの2つ目
plot(x, y2);
title('y2 = x^3');
xlabel('x');
ylabel('y2');
% サブプロット3: y3 = x^4
subplot(1, 3, 3); % 3行1列のサブプロットの3つ目
plot(x, y3);
title('y3 = x^4');
xlabel('x');
ylabel('y3');
プログラムの流れについて説明します。
- \( x^2 \), \( x^3 \), \( x^4 \)の関数をそれぞれプロットします。
- Octaveでは、べき乗を計算するときに
x.^2
のようにピリオド(.
)を使う必要があります。これにより、要素ごとにべき乗が計算されます。 - それぞれのプロットにタイトルと軸ラベルを設定し、グラフがわかりやすく表示されます。
PR