このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
pan
対話型でグラフ領域を移動
構文
pan on
pan xon
pan yon
pan off
pan
pan(fig,...)
h = pan(fig)
説明
pan on
は、現在の Figure の座標軸での移動モードをオンにします。
pan xon
は、移動モードをオンにし、現在の Figure の 2 次元表示で、座標軸の x 方向のみの移動を有効にします。
pan yon
は、移動モードをオンにし、現在の Figure の 2 次元表示で、座標軸の y 方向のみの移動を有効にします。
pan off
は、現在の Figure の座標軸での移動モードをオフにします。R2018b 以降、一部の移動操作は移動モードにかかわらず既定で有効になっています。これらの既定の操作を無効にするには、関数 disableDefaultInteractivity
を使用します。
pan
は、現在の Figure で座標軸の移動モードを on
または off
に切り替えます。
pan(fig,...)
は、指定した Figure における座標軸の移動モードを設定します。
h = pan(fig)
は、Figure fig
の Figure 移動 "モード オブジェクト" を返します。これを使用して、モードの動作をカスタマイズできます。
移動モード オブジェクトの使用
移動モード オブジェクトの次のプロパティにアクセスします。
Enable
'on'|'off'
— この Figure のモードが Figure 上で現在有効かどうかを指定します。Motion
'horizontal'|'vertical'|'both'
— Figure に対して有効な移動タイプ。このプロパティは、2 次元表示の座標軸 ([0 90]
) にのみ影響します。FigureHandle <handle>
— 関連する Figure のハンドル。これは読み取り専用のプロパティで、設定できません。ContextMenu <handle>
— 右クリック操作時に表示される、カスタマイズしたコンテキスト メニューを指定します。UseLegacyExplorationModes
'off'
(既定の設定) | on/off logical 値 – レガシ モード。'on'
または'off'
、もしくは数値または logical1
(true
) または0
(false
) として指定します。'on'
の値はtrue
と等価であり、'off'
はfalse
と等価です。したがって、このプロパティの値を logical 値として使用できます。値はmatlab.lang.OnOffSwitchState
型の on/off logical 値として格納されます。このプロパティを
'on'
に設定すると、従来の Figure のモードの動作と一致するように UI figure の操作モードの動作が変更されます。詳細については、enableLegacyExplorationModes
を参照してください。このプロパティを'on'
に設定した後に'off'
に戻すことはできません。このプロパティは、関数uifigure
を使用して、または MATLAB® Online™ で作成された Figure の移動オブジェクトにのみ適用されます。
移動モードのコールバック
移動モード操作には次のコールバックをプログラムできます。
ButtonDownFilter <function_handle>
—ButtonDown
イベントをインターセプトする関数プログラマの定義により、アプリケーションはコールバックが返すものによって、移動操作を取り消すことができます。入力の関数ハンドルは、グラフィックス オブジェクトのコールバックと同様に、2 つの暗黙的な引数をもつ関数を参照する必要があります。
function [res] = myfunction(obj,event_obj) % obj handle to the object clicked on % event_obj event data (empty in this release) % res [output] a logical flag to determine whether the pan % operation should take place(for 'res' set to 'false') % or the 'ButtonDownFcn' property of the object should % take precedence (when 'res' is 'true')
ActionPreCallback <function_handle>
— 移動前に実行する関数このコールバックは、移動操作の開始時にコードを実行する必要がある場合に設定します。関数ハンドルは、グラフィックス オブジェクトのコールバックと同様に、2 つの暗黙的な引数をもつ関数を参照する必要があります。
function myfunction(obj,event_obj) % obj handle to the figure that has been clicked on % event_obj object containing struct of event data
イベント データ struct には次のフィールドがあります。
Axes
Axes のハンドルは、移動されます。
ActionPostCallback <function_handle>
— 移動後に実行する関数このコールバックは、移動操作の終了時にコードを実行する必要がある場合に設定します。関数ハンドルは、グラフィックス オブジェクトのコールバックと同様に、2 つの暗黙的な引数をもつ関数を参照する必要があります。
function myfunction(obj,event_obj) % obj handle to the figure that has been clicked on % event_obj object containing struct of event data % (same as the event data of the % 'ActionPreCallback' callback)
移動モード ユーティリティ関数
移動モードにおける次の関数は、そのプロパティのいくつかをクエリして設定します。
flags = isAllowAxesPan(h,ax)
— 座標軸を移動する権限をクエリする関数。入力として移動オブジェクト
h
と座標軸ハンドルのベクトルax
を指定して関数isAllowAxesPan
を呼び出すと、座標軸のハンドルのベクトルと同じ次元の logical 配列が返されます。この配列は、その axes オブジェクトで移動操作が使用可能であるかどうかを示します。setAllowAxesPan(h,ax,flag)
— 座標軸を移動する権限を設定する関数。入力として移動オブジェクト
h
、座標軸ハンドルのベクトルax
および論理スカラーflag
を指定して関数setAllowAxesPan
を呼び出すと、この axes オブジェクト上での移動操作が有効または無効に設定されます。cn = getAxesPanConstraint(h,ax)
— 移動操作の制約を取得する関数。axes オブジェクト
ax
を入力として、移動オブジェクトh
に対して関数getAxesPanConstraint
を呼び出すと、座標軸の制約が返されます。返される制約は、'x'
、'y'
、'z'
、'xy'
、'xz'
、'yz'
または'unconstrained'
のいずれかです。setAxesPanConstraint(h,ax,cnstr)
— 移動操作の制約を設定する関数。axes オブジェクト
ax
と制約オプションcnstr
を指定して、移動オブジェクトh
に対して関数setAxesPanConstraint
を呼び出すと、座標軸の制約を設定できます。制約は、'x'
、'y'
、'z'
、'xy'
、'xz'
、'yz'
または'unconstrained'
のいずれかの値として指定します。sty = getAxes3DPanAndZoomStyle(h,ax)
— 移動操作のスタイルを取得する関数。入力として移動オブジェクト
h
、座標軸ハンドルのベクトルax
を指定して関数getAxes3DPanAndZoomStyle
を呼び出すと、各座標軸の移動スタイルが返されます。各座標軸の戻り値は、'limits'
または'camera'
です。setAxes3DPanAndZoomStyle(h,ax,style)
— 移動操作のスタイルを設定する関数。移動オブジェクト
h
、座標軸ハンドルのベクトルax
および文字配列style
を指定して関数setAxes3DPanAndZoomStyle
を呼び出すと、各座標軸の移動スタイルが設定されます。スタイルを'limits'
または'camera'
として指定します。cns = getAxesPanMotion(h,ax)
— 移動操作の制約を取得する関数 (非推奨。getAxesPanConstraint
を使用してください)。移動オブジェクト
h
に対し axes オブジェクトのベクトルax
を入力として関数getAxesPanMotion
を呼び出すと、ax
と同じ次元をもつ文字 cell 配列が返されます。この配列は、各座標軸の制約を示します。各座標軸の戻り値は、'horizontal'
、'vertical'
または'both'
です。setAxesPanMotion(h,ax,constraints)
— 移動操作の制約を設定する関数 (非推奨。setAxesPanConstraint
を使用してください)。移動オブジェクト
h
に対し axes オブジェクトのベクトルax
および文字配列constraints
を指定して関数setAxesPanMotion
を呼び出すと、各座標軸の制約が設定されます。制約を'horizontal'
、'vertical'
または'both'
として指定します。
例
例 1 — 移動モードの開始
グラフをプロットし、移動モードをオンにします。
plot(magic(10)); pan on % pan on the plot
例 2 — 制限された移動
関数 set
を使用して x 軸方向に移動を限定します。
plot(magic(10)); h = pan; h.Motion = 'horizontal'; h.Enable = 'on'; % pan on the plot in the horizontal direction.
例 3 — サブプロット内で制限された移動
4 つのサブプロット Axes を作成し、各 Axes に異なる移動動作を与えます。
ax1 = subplot(2,2,1); plot(1:10); h = pan; ax2 = subplot(2,2,2); plot(rand(3)); setAllowAxesPan(h,ax2,false); ax3 = subplot(2,2,3); plot(peaks); setAxesPanMotion(h,ax3,'horizontal'); ax4 = subplot(2,2,4); contour(peaks); setAxesPanMotion(h,ax4,'vertical'); % pan on the plots.
例 4 — ButtonDown コールバックのコード化
トリガーとして移動モード オブジェクトの buttonDown コールバックを作成します。以下のコードを新規ファイルにコピーし、実行して、移動動作を確認してください。
function demo % Allow a line to have its own 'ButtonDownFcn' callback. hLine = plot(rand(1,10)); hLine.ButtonDownFcn = 'disp(''This executes'')'; hLine.Tag = 'DoNotIgnore'; h = pan; h.ButtonDownFilter = @mycallback; h.Enable = 'on'; % mouse click on the line % function [flag] = mycallback(obj,event_obj) % If the tag of the object is 'DoNotIgnore', then % return true. % Indicate what the target is. disp(['Clicked ' obj.Type ' object']) objTag = obj.Tag; if strcmpi(objTag,'DoNotIgnore') flag = true; else flag = false; end
例 5 — 事前コールバックおよび事後コールバック動作のコード化
トリガーする移動モード オブジェクトの事前および事後 buttonDown イベントのコールバックを作成します。以下のコードを新規ファイルにコピーし、実行して、移動動作を確認してください。
function demo % Listen to pan events plot(1:10); h = pan; h.ActionPreCallback = @myprecallback; h.ActionPostCallback = @mypostcallback; h.Enable = 'on'; % function myprecallback(obj,evd) disp('A pan is about to occur.'); % function mypostcallback(obj,evd) newLim = evd.Axes.XLim; msgbox(sprintf('The new X-Limits are [%.2f,%.2f].',newLim));
例 6 — 移動モードのコンテキスト メニューの作成
ユーザーが右クリックしてズーム モードに切り替えることのできるコンテキスト メニューを作成します。
figure plot(magic(10)); hCM = uicontextmenu; hMenu = uimenu('Parent',hCM,'Label','Switch to zoom',... 'Callback','zoom(gcbf,''on'')'); hPan = pan(gcf); hPan.ContextMenu = hCM; pan('on')
ヒント
例 3 で示したように、作成した移動モード オブジェクトは、他の Axes 動作のカスタマイズにも使用できます。また、移動モード オブジェクトのコールバック関数も順次変更できます。
メモ
対話型モードでは Figure コールバックを変更しないでください。モードがアクティブな場合 (移動中、ズーム中の場合など)、Figure のコールバックのいずれかを変更しようとすると警告が表示され、操作は失敗します。この規則の 1 つの例外は、Figure の WindowButtonMotionFcn
コールバックであり、これはモード内から変更できます。したがって、Figure のコールバックを更新する UI を作成する場合は、これを行う前に、どの対話モードがアクティブになっているか、何らかの方法でその UI で追跡する必要があります。
1 つのモードオブジェクトに対し、異なる移動動作を異なる subplot
Axes に割り当て、関数 linkaxes
を使用してそれらをリンクした場合は、リンクした Axes 上でマウス操作を行っても、他の Axes に設定した動作には影響を受けません。
代替方法
ツール バーの [移動] ツールを使用してプロットでの移動モードの有効/無効を切り替えるか、Figure の [ツール] メニューから [移動] を選択します。