Main Content

複数のプロットの結合

R2019b 以降. 次を置き換え: Combine Multiple Plots (R2019a).

この例では、関数 hold を使用して同じ座標軸内のプロットを結合する方法と、関数 tiledlayout を使用して Figure に複数の座標軸を作成する方法を説明します。

同一座標軸にプロットを結合

既定では、新しいプロットは既存のプロットをクリアし、タイトルなどの座標軸のプロパティをリセットします。ただし、hold on コマンドを使用することで、複数のプロットを同じ座標軸で結合できます。たとえば、2 つのラインと散布図をプロットします。次に、ホールド状態をオフにリセットします。

x = linspace(0,10,50);
y1 = sin(x);
plot(x,y1)
title('Combine Plots')

hold on

y2 = sin(x/2);
plot(x,y2)

y3 = 2*sin(x);
scatter(x,y3) 

hold off

ホールド状態がオンの場合、新しいプロットが、既存のプロットをクリアしたり、タイトルや軸ラベルなどの座標軸のプロパティをリセットすることはありません。プロットは座標軸の ColorOrder プロパティと LineStyleOrder プロパティに基づき色とライン スタイルを順次繰り返します。新しいデータに合わせて座標軸の範囲と目盛り値を調整できます。

Figure における複数の座標軸の表示

関数 tiledlayout を使用すると、単一の Figure に複数の座標軸を表示することができます。この関数は、Figure 全体にわたって不可視のタイルのグリッドを含む、タイル表示のチャート レイアウトを作成します。それぞれのタイルに、プロットを表示するための座標軸を含めることができます。レイアウトを作成した後、関数 nexttile を呼び出して axes オブジェクトをレイアウト内に配置します。次に、プロット関数を呼び出して、座標軸にプロットします。たとえば、2 行 1 列のレイアウトに 2 つのプロットを作成します。各プロットにタイトルを追加します。

x = linspace(0,10,50);
y1 = sin(x);
y2 = rand(50,1);
tiledlayout(2,1)

% Top plot
nexttile
plot(x,y1)
title('Plot 1')

% Bottom plot
nexttile
scatter(x,y2)
title('Plot 2')

複数の行または列にまたがるプロットの作成

複数の行または列にまたがるプロットを作成するには、nexttile を呼び出す際に span 引数を指定します。たとえば、2 行 2 列のレイアウトを作成します。最初の 2 つのタイルにプロットします。次に、1 つの行と 2 つの列にまたがるプロットを作成します。

x = linspace(0,10,50);
y1 = sin(x);
y2 = rand(50,1);

% Top two plots
tiledlayout(2,2)
nexttile
plot(x,y1)
nexttile
scatter(x,y2)

% Plot that spans
nexttile([1 2])
y2 = rand(50,1);
plot(x,y2)

座標軸の外観の変更

各 axes オブジェクトにプロパティを設定することで、座標軸の外観を変更します。出力引数を指定して関数 nexttile を呼び出すことで、axes オブジェクトを取得できます。また、axes オブジェクトをグラフィックス関数の最初の入力引数として指定し、関数が正しい座標軸を必ずターゲットとするようにもできます。

たとえば、2 つのプロットを作成し、axes オブジェクトを変数 ax1 および変数 ax2 に代入します。最初のプロットの座標軸のフォント サイズと x 軸の色を変更します。2 番目のプロットにグリッド ラインを追加します。

x = linspace(0,10,50);
y1 = sin(x);
y2 = rand(50,1);
tiledlayout(2,1)

% Top plot
ax1 = nexttile;
plot(ax1,x,y1)
title(ax1,'Plot 1')
ax1.FontSize = 14;
ax1.XColor = 'red';

% Bottom plot
ax2 = nexttile;
scatter(ax2,x,y2)
title(ax2,'Plot 2')
grid(ax2,'on')

タイル周辺の間隔の制御

Padding プロパティと TileSpacing プロパティを指定することで、レイアウト内のタイル周辺の間隔を制御できます。たとえば、2 行 2 列のレイアウトに 4 つのプロットを表示します。

x = linspace(0,30);
y1 = sin(x);
y2 = sin(x/2);
y3 = sin(x/3);
y4 = sin(x/4);

% Create plots
t = tiledlayout(2,2);
nexttile
plot(x,y1)
nexttile
plot(x,y2)
nexttile
plot(x,y3)
nexttile
plot(x,y4)

Padding プロパティと TileSpacing プロパティを 'compact' に設定することで、レイアウトの周囲と各タイルの周辺の間隔を狭めます。

t.Padding = 'compact';
t.TileSpacing = 'compact';

共有のタイトルおよび軸ラベルの表示

共有のタイトルと共有の軸ラベルをレイアウトに表示することができます。2 行 1 列のレイアウト t を作成します。次に、ライン プロットとステム プロットを表示します。関数 linkaxes を呼び出すことで、x 軸の範囲を同期します。

x1 = linspace(0,20,100);
y1 = sin(x1);
x2 = 3:17;
y2 = rand(1,15);

% Create plots.
t = tiledlayout(2,1);
ax1 = nexttile;
plot(ax1,x1,y1)
ax2 = nexttile;
stem(ax2,x2,y2)

% Link the axes
linkaxes([ax1,ax2],'x');

t を関数 titlexlabel、および ylabel に渡すことで、共有のタイトルと共有の軸ラベルを追加します。x 軸の目盛りラベルを上のプロットから削除し、tTileSpacing プロパティを 'compact' に設定することで、プロットを互いに近付けます。

% Add shared title and axis labels
title(t,'My Title')
xlabel(t,'x-values')
ylabel(t,'y-values')

% Move plots closer together
xticklabels(ax1,{})
t.TileSpacing = 'compact';

参考

関数

関連するトピック