Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

[Python] 図の枠線・軸線調整

Last updated at Posted at 2020-10-10

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)
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?