web-dev-qa-db-ja.com

Matplotlibサブプロット-目盛りラベルを完全に取り除く

Matplotlibでサブプロットの配列を作成するときに目盛りラベルを完全に取り除く方法はありますか?現在、プロットが対応するより大きなデータセットの行と列に基づいて、各プロットを指定する必要があります。 ax.set_xticks([])と同様のy軸コマンドを使用しようとしましたが、役に立ちませんでした。

軸データのないプロットを作成したいというのはおそらく珍しい要求であることを私は認識していますが、それは私が必要としていることです。そして、配列内のすべてのサブプロットに自動的に適用する必要があります。

20
Palmetto_Girl86

あなたは正しい方法を持っています。正しい軸にset_xticksを適用していない可能性があります。

例:

import matplotlib.pyplot as plt
import numpy as np

ncols = 5
nrows = 3

# create the plots
fig = plt.figure()
axes = [ fig.add_subplot(nrows, ncols, r * ncols + c) for r in range(0, nrows) for c in range(0, ncols) ]

# add some data
for ax in axes:
    ax.plot(np.random.random(10), np.random.random(10), '.')

# remove the x and y ticks
for ax in axes:
    ax.set_xticks([])
    ax.set_yticks([])

これは与える:

enter image description here

各軸インスタンスはリスト(axes)に格納され、簡単に操作できることに注意してください。いつものように、これを行うにはいくつかの方法があり、これは単なる例です。

20
DrV

コマンドはサブプロットと同じです

In [1]: fig = plt.figure()

In [2]: ax1 = fig.add_subplot(211)

In [3]: ax2 = fig.add_subplot(212)

In [4]: ax1.plot([1,2])
Out[4]: [<matplotlib.lines.Line2D at 0x10ce9e410>]

In [5]: ax1.tick_params(
   ....:     axis='x',          # changes apply to the x-axis
   ....:     which='both',      # both major and minor ticks are affected
   ....:     bottom='off',      # ticks along the bottom Edge are off
   ....:     top='off',         # ticks along the top Edge are off
   ....:     labelbottom='off'  # labels along the bottom Edge are off)
   ....:)

In [6]: plt.draw()

enter image description here

11
Ben

@DrVの回答よりもさらに簡潔に、@ mwaskomのコメントをリミックスし、すべてのサブプロットのすべての軸を取り除くための完全かつ完全なワンライナー:

# do some plotting...
plt.subplot(121),plt.imshow(image1)
plt.subplot(122),plt.imshow(image2)
# ....

# one liner to remove *all axes in all subplots*
plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);
4
Roy Shilkrot