matplotlibプロットで軸テキストを非表示にする


370

どちらの軸にも目盛りや数字のない図をプロットしようとしています(matplotlibの命名法ではなく、従来の意味で軸を使用しています!)。私が遭遇した問題は、matplotlibが値Nを減算してx(y)ticklabelsを調整し、次に軸の最後にNを追加することです。

これは曖昧かもしれませんが、次の簡略化された例は問題を強調しています。「6.18」はNの問題のある値です。

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

私が知りたい3つのことは:

  1. 最初の場所で、この動作をオフにする方法(ほとんどの場合、それは便利ですが、それは常にではありません!)私はを通して見ているmatplotlib.axis.XAxisと何の適切なを見つけることができません

  2. Nを非表示にするにはどうすればよいですか(つまりX.set_visible(False)

  3. とにかく上記を行うより良い方法はありますか?私の最終的なプロットは、関連がある場合、図の4x4サブプロットになります。


ここでの答えのいずれかが実際に質問に答えるかどうか、私は少し疑問があります。私には、オフセットを取り除く方法を質問するように見えます。しかし、すべての回答は、すべての目盛りラベルを取り除く方法をさまざまに示しています。質問に回答がスーパーシードされている場合は、質問を編集して、回答が解決策を提供する理由を尋ねる必要がありますか?
ImportanceOfBeingErnest

回答:


471

各要素を非表示にする代わりに、軸全体を非表示にすることができます。

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

または、ティックを空のリストに設定できます。

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

この2番目のオプションでも、plt.xlabel()およびplt.ylabel()を使用して、軸にラベルを追加できます。


2
Hey Ofri-ありがとう 手動でテキストウィジェットを配置する以外。
Dave

5
この例を3Dにどのように拡張できますか?ax = plt.gca(projection = '3d')、ax.axes.get_zaxis()。set_visible(False)が与える'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762

13
この回答では、グリッド線を表示できません。@saullo castroの答えは、しかし...
evan54

ただ、問題を修正し@Saulloカストロの答えを見て:問題はX_AXISが見えないに設定されている場合、グリッドdsappears :(編集ということである。
Shailen

1
@ user989762あなたの場合、この方法は機能しませんget_xaxis().set_visible(False)。この場合、matplotlibは、プロットが2Dであるかのようにいくつかのパラメーターを初期化すると思います。ax.set_zticks([])あなたが望むことをします
kon psych

222

グリッド線を維持したまま軸テキストのみを非表示にする場合:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

やっset_visible(False)たりset_ticks([])もグリッド線を非表示になります。


4
これにより、その軸を共有するすべてのサブプロットのラベルが削除されます:/
endolith

136

あなたが私のようなものでax、図をプロットするときに常にAxesを取得するとは限らない場合、簡単な解決策は

plt.xticks([])
plt.yticks([])

56

多少古いスレッドですが、これは最新バージョンのmatplotlibを使用した方が高速な方法のようです。

x軸の主なフォーマッターを設定する

ax.xaxis.set_major_formatter(plt.NullFormatter())

1
1ティックだけにしたい場合はどうでしょうか?
tommy.carstensen 2015

5
はい。これは、.set_xticks([])が目盛り自体も削除するため、ラベルを非表示にする場合にのみ役立ちます。
zbyszek 2015

49

私は実際には、ここのコードスニペット(回答で受け入れられたものでも)に基づいて、境界線または軸データなしで画像をレンダリングすることはできませんでした。いくつかのAPIドキュメントを調べた後、このコードにアクセスして画像をレンダリングしました

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

tick_params呼び出しを使用して、レンダリングされる可能性のあるすべての追加情報を基本的にシャットダウンし、出力ファイルに完全なグラフを作成しました。


1
軸が共有されている場合、set_ticklabelsに基づくソリューションは共有軸に伝播します。tick_paramsに基づくこのソリューションだけが私にとってうまく機能していました。
クリスチャンオライリー

39

プロセスを簡単にするために、この図を色分けしました。

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

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

これらのコマンドを使用して図を完全に制御できます。答えを完成させるために、スプラインの制御も追加しました。

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)

ax.set_xticklabels([])そしてax.set_xticks([])私のために動作しますが、しませんでしたax.axes.get_xaxis().set_visible(False)でした。
Homero Esmeraldo

2
これは受け入れられる答えになるはずです
ジェイソンS

6

オブジェクト指向のAPIを使用する場合、Axesオブジェクトには、軸のテキストを削除するための2つの便利なメソッドがset_xticklabels()ありset_xticks()ます。

あなたが使用してプロットを作成するとします

fig, ax = plt.subplots(1)
ax.plot(x, y)

目盛りラベルを削除したいだけの場合は、

ax.set_xticklabels([])

または、ティックを完全に削除するには、次を使用できます

ax.set_xticks([])

これらのメソッドは、目盛りをどこに置き、どのようにラベルを付けるかを正確に指定するのに役立ちます。空のリストを渡すと、それぞれティックまたはラベルがなくなります。


2

1つのトリックは、目盛りラベルの色を白に設定して非表示にすることです。

plt.xticks(color='w')
plt.yticks(color='w')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.