Figure
> Axes
> Axis
> Tick
という階層構造だが,
図の枠線・軸線は主にAxes
から操作する.
(以下「軸線」はAxesやAxisと紛らわしいので「枠線」で統一)
消す
枠線・目盛り線・目盛りラベルは別制御.
リストを渡すものは消す以外でも利用.
メソッド | 消えるもの |
---|---|
ax.axis('off') | 縦・横両方のAxis(枠線), Tick(ラベル・目盛り)全て |
ax.set_axis_off() | ax.axis('off')と同じ |
ax.set_frame_on(False) | 縦・横両方の線 (計4本) |
ax.spines[loc].set_visible(False) | 1本ずつ線を消す loc: 'top', 'bottom', 'left', 'right' |
ax.xaxis.set_ticks([]) | 横方向の軸目盛・ラベル |
ax.yaxis.set_ticks([]) | 縦方向の軸目盛・ラベル |
ax.xaxis.set_ticklabels([]) | 横方向の軸ラベル |
ax.yaxis.set_ticklabels([]) | 縦方向の軸ラベル |
[matplotlib.axes.Axes.axis]
(https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.axes.Axes.axis.html)
※cartopyを使っているときの枠線はax.outline_patchになるため,これを消すには
ax.outline_patch.set_linewidth(0)
とする.
github: Cannot change the border width of the cartopy axes
Qiita: matplotlibで軸を消す
簡易版: pltから直接指定
import matplotlib.pyplot as plt
# 一括
plt.axis('off')
# 目盛り線
plt.tick_params(bottom=False, left=False, right=False, top=False)
# 目盛りラベル
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
目盛り・目盛りラベルがつく縦軸を右に,横軸を上に
ax.yaxis.tick_right() # 目盛り・目盛りラベルがつく縦軸を右に
ax.xaxis.tick_top() # 横軸を上に
[stackoverflow: Python Matplotlib Y-Axis ticks on Right Side of Plot]
(https://stackoverflow.com/questions/10354397/python-matplotlib-y-axis-ticks-on-right-side-of-plot)
[stackoverflow: Moving x-axis to the top of a plot in matplotlib]
(https://stackoverflow.com/questions/14406214/moving-x-axis-to-the-top-of-a-plot-in-matplotlib)
軸の反転
ax.invert_yaxis()
plt.gca().invert_yaxis()
横軸(x軸)の反転には*_xaxis()
.
stackoverflow: Reverse Y-Axis in PyPlot
[matplotlib: matplotlib.axes.Axes.invert_yaxis]
(https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.invert_yaxis.html)
色を変える
目盛り線・目盛りラベルは一括で変更可能,枠線は別.
ax.spines['left'].set_color('red') # 枠線
ax.tick_params(axis='y', colors='red') # 目盛り線・目盛りラベル
ax.yaxis.label.set_color('red') # ラベル(軸の名前)
facecolor, edgecolor, framealpha
目盛りラベルの背景色の変更
目盛りラベルはText
なので,このメソッドを活用.
for tick in ax.get_xticklabels():
tick.set_backgroundcolor('white')
# 透明度を設定したいとき.edgecolorを指定しないと黒枠ができる
tick.set_bbox({'facecolor':'white', 'alpha':0.8, 'edgecolor':'None'})
目盛りの編集
Axis
ではなくAxes
から操作.
# 目盛りの位置
ax.get_xticks()
ax.set_xticks(locs)
# 目盛りラベル
ax.get_xticklabels()
ax.set_xticklabels(labs)
図によっては一旦plt.draw()
で描画してからでないと期待通りの動作にならない:
[Qiita@aisha: 【Python】図の目盛りラベルを取得・編集]
(https://qiita.com/aisha/items/3a4f2e402d0b5fe05da8)
目盛りを整数に限定する
ax.yaxis.get_major_locator().set_params(integer=True)
[stackoverflow: Python matplotlib restrict to integer tick locations]
(https://stackoverflow.com/a/11417609)
軸の範囲 (*lim
)
xlim/ylim
オブジェクト指向インターフェイスとPyplotインターフェイスで微妙に関数・メソッド名が異なるので注意
plt.xlim()
, ax.get_xlim()
で現在の範囲を取得
left, right = plt.xlim()
bottom, top = plt.ylim()
引数left
, right
, bottom
, top
で片方のみ設定
plt.xlim(left=1)
ax.set_xlim(left=1)
plt.ylim(bottom=2)