web-dev-qa-db-ja.com

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

いずれかの軸に目盛りや数字のない図をプロットしようとしています(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サブプロットになります。

313
Dave

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

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()を使ってラベルをAxesに追加することができます。

384
Ofri Raviv

グリッド線を維持しながら軸テキストだけを隠したい場合は、次のようにします。

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

set_visible(False)またはset_ticks([])を実行すると、グリッド線も非表示になります。

189

あなたが私のようで、図をプロットするときに常にaxという軸を取得しないのであれば、簡単な解決策は

plt.xticks([])
plt.yticks([])
97
Ébe Isaac

やや古いスレッドですが、これは最新バージョンのmatplotlibを使ったより速い方法のようです:

x軸のメジャーフォーマッタを設定する

ax.xaxis.set_major_formatter(plt.NullFormatter())
46
Nik Twerdochlib

私は実際には(答えで受け入れられたものでさえ)ここにコードスニペットのどれに基づいてもボーダーまたは軸データなしで画像をレンダリングすることができませんでした。いくつかの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呼び出しを使用して、表示される可能性のある余分な情報を基本的にすべて停止しました。出力ファイルには完璧なグラフがあります。

28
GingerLoaf

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

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

enter image description here

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

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)
10
G M

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

次のようにしてプロットを作成したとします。

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

目盛ラベルを削除したいだけの場合は、次のようにします。

ax.set_xticklabels([])

またはダニを完全に削除するには、使用することができます

ax.set_xticks([])

これらのメソッドは、目盛りを付ける場所とラベル付け方法を正確に指定するのに役立ちます。空のリストを渡すと、それぞれ目盛りもラベルも表示されません。

4

1つのトリックは、目盛ラベルの色を白にして隠すことです。

plt.xticks(color='w')
plt.yticks(color='w')
1
ai_learning