Main Content

App Designer でのグラフィックスの表示

App Designer におけるグラフィックスの概要

MATLAB® (および MATLAB ツールボックス) のグラフィックス関数の多くには、ターゲット座標軸または親オブジェクトを指定するための引数があります。この引数はほとんどのコンテキストで省略可能ですが、App Designer でこれらの関数を呼び出す場合は、この引数を指定しなければなりません。その理由は、多くの場合、MATLAB は既定で関数 gcf または関数 gca を使用して演算のターゲット オブジェクトを取得するためです。これらの関数は親 Figure の HandleVisibility プロパティが 'on' になっていることを必要としますが、App Designer の Figure の HandleVisibility プロパティは既定では 'off' になっています。つまり、gcfgca は通常どおり動作しません。そのため、ターゲットの座標軸または親オブジェクトの引数を省略すると、予期しない結果が発生する可能性があります。

呼び出すグラフィックス関数に応じて、以下を指定する必要がある場合があります。

  • キャンバスの UIAxes コンポーネント

  • アプリの親コンテナー

  • アプリ コード内でプログラムにより作成する座標軸コンポーネント

グラフィックス関数にターゲット コンポーネントを指定する方法は多数あります。最も一般的な構文の例をいくつか以下に示します。コンテキストに合った適切なターゲットと構文を判断するには、使用中の特定のグラフィックス関数に関するドキュメントを参照してください。

既存の座標軸へのグラフィックスの表示

App Designer にグラフィックスを表示する最も一般的な方法は、App Designer のキャンバス上にグラフィックス関数のターゲットとして UIAxes オブジェクトを指定することです。[コンポーネント ライブラリ] から座標軸コンポーネントをキャンバスにドラッグすると、アプリに UIAxes オブジェクトが作成されます。App Designer の axes オブジェクトの既定の名前は app.UIAxes です。キャンバス上の特定の座標軸の名前を決定または変更するには、座標軸コンポーネントを選択します。その名前がリスト表示され、[コンポーネント ブラウザー] で編集できます。

1 番目の引数としての座標軸の指定

多くのグラフィックス関数には、ターゲットの axes オブジェクトを指定するためにオプションの 1 番目の入力引数があります。たとえば、plot および hold の両関数はこの方法でターゲットの axes オブジェクトを取得します。キャンバス上のある座標軸のセットに 2 つのラインをプロットするには、呼び出す各関数の 1 番目の引数としてその axes オブジェクトの名前を指定します。

plot(app.UIAxes,[1 2 3 4],'-r');
hold(app.UIAxes);
plot(app.UIAxes,[10 9 4 7],'--b');

名前と値の引数としての座標軸の指定

一部のグラフィックス関数では、ターゲットの axes オブジェクトを名前と値の引数として指定する必要があります。たとえば、関数 imshow および triplot を呼び出すときは、名前と値の引数 'Parent' を使用して、表示する axes オブジェクトを指定します。以下のコードは、キャンバス上の既存の座標軸のセット上にイメージを表示します。

imshow('peppers.png','Parent',app.UIAxes);

コンテナー内でのグラフィックスの表示

一部のグラフィックス関数は、axes オブジェクトではなく、Figure、パネル、グリッド レイアウトなどのコンテナー コンポーネント内に表示されます。たとえば、関数 heatmap には、チャートが表示されるコンテナーを指定するためのオプションの 1 番目の引数があります。

すべての App Designer アプリに app.UIFigure という既定の名前をもつ figure オブジェクトがあり、これはメイン アプリ ウィンドウを構成するコンポーネントのコンテナーです。メイン アプリ ウィンドウにグラフィックスを表示するには、app.UIFigure を親コンテナーの引数として指定します。たとえば、アプリにヒート マップを作成するには、以下の構文を使用します。

h = heatmap(app.UIFigure,rand(10));

親コンテナーの入力引数を取るグラフィックスをさらに整理しコンパートメント化するには、[コンポーネント ライブラリ] からパネル、タブ、グリッド レイアウトなどのコンテナー コンポーネントをキャンバス上にドラッグします。コンポーネントの名前を確認するには、それを選択し、[コンポーネント ブラウザー] で名前を表示します。その後、グラフィックス関数を呼び出すときにこのコンテナーを親として指定できます。

親コンテナーを入力として取るその他のよく使用されるグラフィックス関数には、annotationgeobubbleparallelplotscatterhistogramstackedplot、および wordcloud があります。

プログラミングによる座標軸の作成

一部のグラフィックス関数は特殊な座標軸上にデータをプロットします。たとえば、極データをプロットする関数では、PolarAxes オブジェクトにデータをプロットしなければなりません。[コンポーネント ライブラリ] からアプリに追加できる UIAxes オブジェクトとは異なり、特殊な座標軸はコードの "プログラムによって" アプリに追加しなければなりません。axes オブジェクトをプログラムによって作成するには、アプリに StartupFcn コールバックを作成します。その中で、適切なグラフィックス関数を呼び出し、アプリの親コンテナーをターゲットとして指定します。

極座標軸へのプロット

polarplotpolarhistogrampolarscatter などの関数はターゲットとして polar axes オブジェクトを取ります。関数 polaraxes を呼び出し、極座標軸をプログラムによって作成します。たとえば、パネルに極座標の数式をプロットするには、まず、[コンポーネント ライブラリ] からキャンバスへパネル コンポーネントをドラッグします。アプリのコード内で関数 polaraxes を呼び出し、親コンテナーとしてそのパネルを指定して、polar axes オブジェクトを作成します。次に、関数 polarplot を使用し、ターゲット軸として極座標軸を指定して、式をプロットします。

theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
pax = polaraxes(app.Panel);
polarplot(pax,theta,rho)

地理座標軸へのプロット

geoplotgeoscattergeodensityplot などの関数はターゲットとして geographic axes オブジェクトを取ります。関数 geoaxes を呼び出し、地理座標軸をプログラムによって作成します。たとえば、地理座標軸をパネルにプロットするには、次のコードを使用します。

latSeattle = 47 + 37/60;
lonSeattle = -(122 + 20/60);
gx = geoaxes(app.Panel);
geoplot(gx,latSeattle,lonSeattle)

タイル表示チャート レイアウトの作成

関数 tiledlayout を使用して複数のチャートをタイル表示するには、パネル内にタイル表示チャート レイアウトを作成し、その中に座標軸を関数 nexttile を使用してプログラムによって作成します。関数 nexttile から axes オブジェクトを返し、それを使用してチャートまたはプロットの座標軸を指定します。

t = tiledlayout(app.Panel,2,1);
[X,Y,Z] = peaks(20)

% Tile 1
ax1 = nexttile(t);
surf(ax1,X,Y,Z)

% Tile 2
ax2 = nexttile(t);
contour(ax2,X,Y,Z)

ターゲット引数をもたない関数の使用

ginput および gtext など、一部のグラフィックス関数にはターゲットを指定するための引数がありません。そのため、これらの関数を呼び出す前に、App Designer の Figure の HandleVisibility プロパティを 'callback' または 'on' に設定しなければなりません。これらの関数を呼び出した後、HandleVisibility プロパティを 'off' に戻すことができます。たとえば、次のコードは、関数 ginput を使用して 2 つの点の座標を特定できるコールバックの定義方法を示しています。

function pushButtonCallback(app,event) 
    app.UIFigure.HandleVisibility = 'callback';
    ginput(2)
    app.UIFigure.HandleVisibility = 'off';
end

自動サイズ変更をサポートしていない関数の使用

App Designer の Figure は既定でサイズ変更できます。これは、アプリを実行して Figure ウィンドウのサイズを変更すると、Figure 内のコンポーネントが自動的にサイズ変更され、ウィンドウに合わせて再配置されるということです。しかし、一部のグラフィックス関数は自動サイズ変更をサポートしていません。これらの関数を App Designer で使用するには、関数の出力を表示するパネルを作成し、パネルの AutoResizeChildren プロパティを 'off' に設定します。このプロパティは、[コンポーネント ブラウザー][パネル] タブで、またはコードで設定できます。

たとえば、関数 subplot は自動サイズ変更をサポートしていません。アプリでこの関数を使用するには、以下を行います。

  1. [コンポーネント ライブラリ] からキャンバスにパネル コンポーネントをドラッグします。

  2. パネルの AutoResizeChildren プロパティを 'off' に設定します。

  3. subplot を呼び出すときには、名前と値の引数 'Parent' を使用して、パネルを親コンテナーとして指定します。また、座標軸を格納する出力引数を指定します。

  4. 座標軸を最初の入力引数としてプロット関数を呼び出します。

app.Panel.AutoResizeChildren = 'off';
ax1 = subplot(1,2,1,'Parent',app.Panel);
ax2 = subplot(1,2,2,'Parent',app.Panel);
plot(ax1,[1 2 3 4])
plot(ax2,[10 9 4 7])

自動サイズ変更をサポートしていないその他のよく使用される関数には、paretoplotmatrix があります。

サイズ変更動作の管理の詳細については、既定の自動サイズ変更動作の代替方法を参照してください。

サポートされない機能

一部のグラフィックス機能は App Designer でサポートされていません。次の表に、アプリ作成ワークフローに関連の深いサポートされていない機能を示します。

カテゴリサポートなし
データの取得と保存

関数 hgexporthgloadhgsavesaveloadsavefigopenfigsaveas、および print はサポートされていません。

アプリ ウィンドウの内容を保存するには、関数 saveas または print ではなく関数 exportapp を使用します。プロットをアプリに保存するには、関数 exportgraphics または関数 copygraphics を使用します。

uifigure を使ってプログラムにより作成された Figure では、関数 saveloadsavefig、および openfig がサポートされます。

Web アプリ

App Designer を使用して展開用 Web アプリを作成する場合 (MATLAB Compiler™ が必要)、追加のグラフィックス制限が適用されます。

詳細については、Web アプリの制限とサポートされていない機能 (MATLAB Compiler)を参照してください。

参考

|

関連するトピック