Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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'、もしくは数値または logical 1 (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
    

    イベント データ構造体には次のフィールドがあります。

    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 の [ツール] メニューから [移動] を選択します。

互換性についての考慮事項

すべて展開する

R2020a 以降は非推奨

R2006a より前に導入