App Designer でのグラフィックスの表示
App Designer におけるグラフィックスの概要
MATLAB® (および MATLAB ツールボックス) のグラフィックス関数の多くには、ターゲット座標軸または親オブジェクトを指定するための引数があります。この引数はほとんどのコンテキストで省略可能ですが、App Designer でこれらの関数を呼び出す場合は、この引数を指定しなければなりません。その理由は、多くの場合、MATLAB は既定で関数 gcf
または関数 gca
を使用して演算のターゲット オブジェクトを取得するためです。これらの関数は親 Figure の HandleVisibility
プロパティが 'on'
になっていることを必要としますが、App Designer の Figure の HandleVisibility
プロパティは既定では 'off'
になっています。つまり、gcf
と gca
は通常どおり動作しません。そのため、ターゲットの座標軸または親オブジェクトの引数を省略すると、予期しない結果が発生する可能性があります。
呼び出すグラフィックス関数に応じて、以下を指定する必要がある場合があります。
キャンバスの
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));
親コンテナーの入力引数を取るグラフィックスをさらに整理しコンパートメント化するには、[コンポーネント ライブラリ] からパネル、タブ、グリッド レイアウトなどのコンテナー コンポーネントをキャンバス上にドラッグします。コンポーネントの名前を確認するには、それを選択し、[コンポーネント ブラウザー] で名前を表示します。その後、グラフィックス関数を呼び出すときにこのコンテナーを親として指定できます。
親コンテナーを入力として取るその他のよく使用されるグラフィックス関数には、annotation
、geobubble
、parallelplot
、scatterhistogram
、stackedplot
、および wordcloud
があります。
プログラミングによる座標軸の作成
一部のグラフィックス関数は特殊な座標軸上にデータをプロットします。たとえば、極データをプロットする関数では、PolarAxes
オブジェクトにデータをプロットしなければなりません。[コンポーネント ライブラリ] からアプリに追加できる UIAxes
オブジェクトとは異なり、特殊な座標軸はコードの "プログラムによって" アプリに追加しなければなりません。axes オブジェクトをプログラムによって作成するには、アプリに StartupFcn
コールバックを作成します。その中で、適切なグラフィックス関数を呼び出し、アプリの親コンテナーをターゲットとして指定します。
極座標軸へのプロット
polarplot
、polarhistogram
、polarscatter
などの関数はターゲットとして 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)
地理座標軸へのプロット
geoplot
、geoscatter
、geodensityplot
などの関数はターゲットとして 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
は自動サイズ変更をサポートしていません。アプリでこの関数を使用するには、以下を行います。
[コンポーネント ライブラリ] からキャンバスにパネル コンポーネントをドラッグします。
パネルの
AutoResizeChildren
プロパティを'off'
に設定します。subplot
を呼び出すときには、名前と値の引数'Parent'
を使用して、パネルを親コンテナーとして指定します。また、座標軸を格納する出力引数を指定します。座標軸を最初の入力引数としてプロット関数を呼び出します。
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])
自動サイズ変更をサポートしていないその他のよく使用される関数には、pareto
と plotmatrix
があります。
サイズ変更動作の管理の詳細については、既定の自動サイズ変更動作の代替方法を参照してください。
サポートされない機能
一部のグラフィックス機能は App Designer でサポートされていません。次の表に、アプリ作成ワークフローに関連の深いサポートされていない機能を示します。
カテゴリ | サポートなし |
---|---|
データの取得と保存 | 関数 アプリ ウィンドウの内容を保存するには、関数
|
Web アプリ | App Designer を使用して展開用 Web アプリを作成する場合 (MATLAB Compiler™ が必要)、追加のグラフィックス制限が適用されます。 詳細については、Web アプリの制限とサポートされていない機能 (MATLAB Compiler)を参照してください。 |
参考
UI Figure のプロパティ | UIAxes のプロパティ