2017-07-31 7 views
1

目的は、以下のように単純なプロットでsub_figureを挿入することである。matplotlib.pyplot.axes()の引数の混乱

import numpy as np 
from matplotlib import pyplot as plt 
X = np.linspace(-6, 6, 1024) 
Y = np.sinc(X) 
X_detail = np.linspace(-3, 3, 1024) 
Y_detail = np.sinc(X_detail) 
plt.plot(X, Y, c = 'k') 
sub_axes = plt.axes([0.6,0.6,0.25,0.25]) 
sub_axes.plot(X_detail, Y_detail, c = 'k') 
plt.setp(sub_axes) 
plt.show() 

上記のコードは次のような出力が得られる:

enter image description here

をmatplotlibのドキュメントでは、matplotlib.pyplot.axes()関数が取る引数はrect=[left, bottom, width, height]と定義されたリストで、座標left, bottom, width, heightは正規化された(0,1)の値として追加されています。 誰も私にそれを説明することはできますか?

最後の2つの座標はsub_figureのサイズに相当します。これは最初の2つの処理とは何ですか?

+1

左下隅の座標は? – DavidG

+0

しかし、左下隅の座標は(0.6,0.6)でなければなりませんか? @DavidG – User9523

+0

'plt.setp(sub_axes)'のポイントは何ですか? –

答えて

1

混乱は、matplotlibが使用するさまざまな座標系から来ているようです。ここでは、件名に関する(かなり網羅的な)チュートリアルへのリンクがあります:https://matplotlib.org/users/transforms_tutorial.html。私はここに直接影響を与える要点を要約します。

軸に表示される座標はdata space or data coordinatesです。これは基本的にプロットのxlimとylimです。これらは2つのプロットに対して完全に独立しており、Figureのサイズや位置の影響を受けません。

sub_axes = plt.axes([0.6,0.6,0.25,0.25])と言うときは、FigureのスペースまたはFigure座標に座標を指定しています。これは概念的にはaxis space or axis coordinatesと非常に似ていますが、個々の軸の集合ではなく図全体に適用される点が異なります。

この場合、サブ軸の起点は、の左下隅を基準にして、(0.6, 0.6)になります。 の右上隅が(1, 1)であるところ。予想通り、サブ軸は図形ウィンドウの真ん中のちょうど上と右に始まります。

同様に、幅は(0.25, 0.25)です。つまり、各軸ののサイズの1/4になります。これは、副軸の右上の角が(0.85, 0.85)の数字のスペースにあることを意味すると解釈することもできます。

いくつかのテストを行うことができます。メイン軸をどのようにパンまたはズームしても、サブ軸は影響を受けません。ただし、Figureをサイズ変更すると、両方の軸セットがサイズを変更して補正されます。サブアキシャルのサイズは、図のサイズと同じアスペクト比でなければなりません。