概要
グラフのx軸、y軸の位置や表示の有無については、Axes
オブジェクトのspines
プロパティーで制御する。
spines
は辞書型でbottom
、top
、left
、right
のキーで対象を指定し、表示位置はset_position()
メソッド、表示の有無はset_visible()
で操作する。
軸の指定
spines['bottom']
とspines['left']
は下と左の軸で、軸の値が表示される。
spines['top']
とspines['right']
は上と右の軸で、ただ線が引かれるだけ。
各軸に対して、set_positon()
、set_visible()
の各メソッドを実行して、位置や可視/不可視を設定する。
軸の表示・非表示
set_visible(False)
で軸を非表示にする。
以下の例では、上の軸と右の軸を非表示にしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 1, 50) fig , axes = plt.subplots(1, 2) for ax in axes: ax.plot(x, 1 - x) ax.set_xlim(0, 1) ax.set_ylim(0, 1) ax.grid() ax.set_aspect('equal') axes[1].spines['right'].set_visible(False) axes[1].spines['top'].set_visible(False) plt.show() |
ゼロ位置/中央に軸位置を設定
set_position(‘zero’)でゼロの位置に、set_position(‘center’)で描画位置の中央に軸をセットできる。set_visible()と組み合わせて使うケースが多そう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1, 2, 50) fig , axes = plt.subplots(1, 2) for ax in axes: ax.plot(x, 1 - x) ax.set_xlim(-1, 2) ax.set_ylim(-1, 2) ax.set_xticks(np.arange(-1, 2.5, 0.5)) ax.set_yticks(np.arange(-1, 2.5, 0.5)) ax.grid() ax.set_aspect('equal') ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) axes[0].spines['bottom'].set_position('zero') axes[0].spines['left'].set_position('zero') axes[1].spines['bottom'].set_position('center') axes[1].spines['left'].set_position('center') plt.show() |
軸の位置の数値指定
set_position()
の引数として、タプルで('指定方法', 値)
の形で与える。
指定方法 | 値 |
data | 各軸を配置するx、yの値。 |
outward | 単位はポイントで、正なら描画領域の内側、負なら外側に配置。 |
axes | 描画領域の高さ・幅に対する割合。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 50) fig , axes = plt.subplots(2, 2) for row in axes: for ax in row: ax.plot(x, 10 - x) ax.set_xlim(0, 10) ax.set_ylim(0, 10) ax.set_xticks(np.arange(0, 12, 2)) ax.set_yticks(np.arange(0, 12, 2)) ax.grid() ax.set_aspect('equal') ax = axes[0, 1] ax.set_title('data') ax.spines['bottom'].set_position(('data', 1)) ax.spines['left'].set_position(('data', 2)) ax.spines['top'].set_position(('data', 7)) ax.spines['right'].set_position(('data', 8)) ax = axes[1, 0] ax.set_title('outward') ax.spines['bottom'].set_position(('outward', 5)) ax.spines['left'].set_position(('outward', -10)) ax.spines['top'].set_position(('outward', 15)) ax.spines['right'].set_position(('outward', -20)) ax = axes[1, 1] ax.set_title('axes') ax.spines['bottom'].set_position(('axes', 0.1)) ax.spines['left'].set_position(('axes', 0.2)) ax.spines['top'].set_position(('axes', 0.7)) ax.spines['right'].set_position(('axes', 0.8)) fig.subplots_adjust(hspace=0.5) plt.show() |