web-dev-qa-db-ja.com

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

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

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

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

95
Michael Kuhn

これは、公式Webサイトから推奨されるMatplotlib 2.0ソリューションです [〜#〜] 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()

enter image description here

99
divenex

あるいは、これ

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; this に触発されたソリューション)。

62
timday

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

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

より良い example がオンラインになったと言って更新しています。ただし、まだSubversionバージョンが必要です。これを含むリリースはまだありません。

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

32
Autoplectic

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

軸を非表示にし(たとえば、plt.gca().axison = Falseを使用)、plt.arrowを使用して手動で描画します。

9
nikow

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


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

  • 境界線(別名「背骨」)を非表示にするには:ax.set_frame_on(False)またはax.spines['top'].set_visible(False)

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

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

6
Evgeni Sergeev

ライブラリ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

4

すべてのプロットから削除する必要がある場合は、スタイル設定(スタイルシートまたは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
0
hadrienj