matplotlibの上軸と右軸を削除するにはどうすればよいですか?


133

デフォルトの「ボックス化された」軸スタイルの代わりに、左と下の軸のみを使用したい、つまり:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

これは簡単なはずですが、ドキュメントに必要なオプションが見つかりません。

回答:


153

これは、公式サイトからの提案matplotlibの3ソリューションですHERE

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()

ここに画像の説明を入力してください


2
これは、matplotlibの新しいバージョンで受け入れられている回答よりも優れています。
2016年

3
初心者のための追加の質問:Matplotlib APIドキュメントに基づいてこの回答はどこにありますか?私がそこに行くと:matplotlib.org/api/axes_api.htmlspineオブジェクトへの参照が表示されず、このキーワードを推測していなかったでしょう。
Eric Burel

63

あるいは、これ

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()

回転したラベルのサポートを失うことなく、軸に対して同じ効果を達成するようです。

(Matplotlib 1.0.1; これに触発されたソリューション)。


33

[編集]これを含むバージョン1.3.0の現在(2013-10)のmatplotlib

その機能は実際に追加されたばかりで、Subversionバージョンが必要です。ここでサンプルコードを見ることができます

オンラインでもっと良いがあると言って更新しています。ただし、まだSubversionバージョンが必要ですが、これはまだリリースされていません。

[編集] Matplotlib 0.99.0 RC1がリリースされたばかりで、この機能が含まれています。


たとえば、回転したラベルで上記を使用する前に、目盛りのサポートが不完全であることに関するmatplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/…の警告を必ずお読みください。
15:06

軸の構成方法に依存するようです。によって生成された軸はmpl.subplotsこの方法では使用できませんか?
Stefan van der Walt

8
サンプルのリンクが壊れています。
mkosmala

10

(これは、ここでの包括的な回答に加えて、拡張コメントの詳細です。)


これら3つの要素は、それぞれ独立して非表示にできることに注意してください。

  • 境界線を隠すには(別名 "spine"):ax.set_frame_on(False)またはax.spines['top'].set_visible(False)

  • 目盛りを非表示にするには: ax.tick_params(top=False)

  • ラベルを非表示にするには: ax.tick_params(labeltop=False)


可能性の素晴らしい要約。+1
loved.by.Jesus

9

ティックなどが必要ない場合(たとえば、定性的なイラストをプロットする場合)、次の簡単な回避策を使用することもできます。

軸を非表示にし(例:)plt.gca().axison = False、次にで手動で描画しますplt.arrow


1
これはスパインを削除するようですが、目盛りを残します。目盛りも削除する方法はありますか?
ロブヤング

2
@ロブ:そうです、私が実際に考えていたスクリプトで別のソリューションを使用しました。私は私の答えを変更しました、これは今はうまくいくはずですが、一般的に上記の受け入れられた解決策はより良いです。
nikow

9

Library Seabornには、関数despine()でこれが組み込まれています。

追加するだけです:

import seaborn as sns

次に、グラフを作成します。そして最後に追加します:

sns.despine()

関数のデフォルトのパラメータ値の一部を見ると、上と右のスパインが削除され、下と左のスパインが保持されています。

sns.despine(top=True, right=True, left=False, bottom=False)

ここでさらにドキュメントをチェックしてください:https//seaborn.pydata.org/generated/seaborn.despine.html


7

すべてのプロットから削除する必要がある場合は、スタイル設定(スタイルシートまたはrcParams)でスパインを削除できます。例えば:

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False

すべてのスパインを削除する場合:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.