PR
更新:2024/09/30

Octaveで複数プロットとサブプロットの使用方法・例題について

はるか
はるか
Octaveで複数のグラフを同時に表示できるんだ。便利だね。
ふゅか
ふゅか
そうよ!例えば、\(\sin x\)と\(\cos x\)を同時にプロットしたり、サブプロットを使って別々に配置したりすることができるの!簡単で便利だね♪

1. 複数のプロットとサブプロットについて

Octaveで複数プロットとサブプロットを使用することで、複数のグラフを同時に表示したり、1つのウィンドウに複数のグラフを配置することができます。以下でそれぞれの使い方を解説します。

2. 複数のプロットの使用方法

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

複数のデータセットを1つのグラフに表示するには、plot関数を複数回呼び出すか、hold onhold 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 onhold offを使って1つのグラフに複数の曲線を描画できます。
  • サブプロット:subplot関数を使って、1つのウィンドウに複数のグラフを配置できます。

4. 例題

4.1. 例題1: 複数の三角関数を1つのプロットに表示

次の関数をxの範囲で1つのグラフに重ねてプロットしてください。
  1. \( y_1 = \sin(x) \)
  2. \( y_2 = \sin(2x) \)
  3. \( 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;  % プロットの追加を終了

プログラムの流れについて説明します。

  1. plot(x, y1, 'r')で\( \sin(x) \)を赤色(’r’)でプロットします。
  2. hold on;を使って、次のプロットを同じグラフに追加できるようにします。
  3. \( \sin(2x) \)を緑色(’g’)、\( \sin\left(\frac{x}{2}\right) \)を青色(’b’)で同じグラフに追加します。
  4. legendで各関数の凡例を表示し、どの線がどの関数に対応しているかがわかるようにします。
  5. grid on;でグリッドを表示し、グラフの可読性を向上させます。

これにより、複数の三角関数を1つのグラフに重ねて表示できます。

4.2. 例題2: 複数のべき乗関数をサブプロットで表示

次のべき乗関数をxの範囲でサブプロットを使って描画してください。
  1. \( y_1 = x^2 \)
  2. \( y_2 = x^3 \)
  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');

プログラムの流れについて説明します。

  1. \( x^2 \), \( x^3 \), \( x^4 \)の関数をそれぞれプロットします。
  2. Octaveでは、べき乗を計算するときにx.^2のようにピリオド(.)を使う必要があります。これにより、要素ごとにべき乗が計算されます。
  3. それぞれのプロットにタイトルと軸ラベルを設定し、グラフがわかりやすく表示されます。

PR