質問: axes('position', [0.1000 0.1000 0.8182 0.4091] ); plot(0.8 , 0.5 , 'o') % 点b xlim([0 1]) ylim([0 1]) % 点aと点bを結ぶ直線を引きたい
回答: annotation を使うのが良いと思います。 下記 qiita に投稿した記事の「axes 間をまたぐ線」が一例になります。 このプロットどうやって描いたの?:phase modulation(位相変調) 以下引用します。 axes 間をまたぐ線 これは annotation 関数で描きます。 ただこちらの記事(matlabのプロットでアノテーションをつける)でも触れているように、annotation オブジェクトは figure 内での位置を指定する必要があります。結ぶべき動く点は axes 上で定義されるデータ値なので、この変換が手間ですが避けられません。 ここは関数を作って乗り越えましょう。 function [xfig,yfig] = axesposition2figureposition(data,handle_axes) x = data(1); y = data(2); handle_axes.units = 'normalize'; axespos = handle_axes.position; % axespos(1): x position of axes in figure % axespos(2): y position of axes in figure % axespos(3): width of axes in figure scale % axespos(4): height of axes in figure scale widthdata = handle_axes.xlim(2)-handle_axes.xlim(1); heightdata = handle_axes.ylim(2)-handle_axes.ylim(1); xmin = handle_axes.xlim(1); ymin = handle_axes.ylim(1); xfig = (x-xmin)/widthdata*axespos(3) + axespos(1); yfig = (y-ymin)/heightdata*axespos(4) + axespos(2); end 入力は axes 上のデータ値と axes オブジェクト。axes オブジェクトの表示範囲(xlim, ylim)と figure 上での位置(position)の情報をもとに、データ値を figure 上での相対位置 (x,y) に変換します。 例えば [xafig,yafig] = axesposition2figureposition([xa,ya],handle_axesa); こんな感じで使います。 使用例 実際に使ってみます。まずは何でもいいので 2 つプロットを描きます。subplot 関数使います。 handle_axes1 = subplot(2,1,1); plot(rand(10,1)); handle_axes2 = subplot(2,1,2); plot(rand(10,1)); そして上のグラフの (x,y) = (2,0.5) から 下のグラフの (x,y) = (8,0.5) まで線を引いてみます。 [xfig1,yfig1] = axesposition2figureposition([2,0.5],handle_axes1); [xfig2,yfig2] = axesposition2figureposition([8,0.5],handle_axes2); annotation("arrow",[xfig1,xfig2],[yfig1,yfig2]) こんな具合です。