Hapus xticks di plot matplotlib?

290

Saya punya plot semilogx dan saya ingin menghapus xticks. Saya mencoba:

plt.gca().set_xticks([])
plt.xticks([])
ax.set_xticks([])

Kisi menghilang (ok), tetapi kutu kecil (di tempat kutu utama) tetap ada. Bagaimana cara menghapusnya?

Vincent
sumber
Beberapa solusi tidak berhasil untuk saya. Tapi hanya sedikit perubahan dari contoh di sini: ax.set_xticks([], [])dan sudah dipecahkan ...
TravelTrader

Jawaban:

464

The tick_paramsMetode ini sangat berguna untuk hal-hal seperti ini. Kode ini mematikan kutu besar dan kecil dan menghilangkan label dari sumbu x.

from matplotlib import pyplot as plt
plt.plot(range(10))
plt.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom=False,      # ticks along the bottom edge are off
    top=False,         # ticks along the top edge are off
    labelbottom=False) # labels along the bottom edge are off
plt.show()
plt.savefig('plot')
plt.clf()

masukkan deskripsi gambar di sini

John Vinyard
sumber
87
Saya menghargai bagaimana ini tidak hanya menjawab pertanyaan tetapi juga menyediakan templat untuk mematikan beberapa hal. Ini berlaku hasilnya untuk sumbu x dan y:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell
2
Bagaimana jika ini adalah plot 3D?
tommy.carstensen
38
Ini jawaban yang bagus. Bagi mereka yang mencari versi oo, axesmemiliki tick_paramsmetode yang sama .
Gila Fisikawan
22
Dalam versi yang lebih baru matplotlib, Anda harus mengganti 'on'dengan Truedan 'off'dengan False.
BallpointBen
1
Jawaban harus diperbarui untuk antarmuka OOP dan sintaks versi yang lebih baru.
ifly6
141

Tidak persis apa yang diminta OP, tetapi cara sederhana untuk menonaktifkan semua garis sumbu, kutu dan label adalah dengan memanggil:

plt.axis('off')
Martin Spacek
sumber
25
Apa yang saya butuhkan terima kasih. Versi berorientasi objek akan berada ax.axis('off')pada instance sumbu yang ada.
PlasmaBinturong
5
bagaimana hanya xaxis?
qrtLs
82

Atau, Anda dapat memberikan posisi centang dan label kosong sebagai

# for matplotlib.pyplot
# ---------------------
plt.xticks([], [])
# for axis object
# ---------------
# from Anakhand May 5 at 13:08
# for major ticks
ax.set_xticks([])
# for minor ticks
ax.set_xticks([], minor=True)
hashmuke
sumber
8
Jika Anda memiliki turunan sumbu yang ada, katakan ax, maka Anda dapat menggunakan:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé ini sekarang memunculkan peringatan, "Melewati parameter minor set_xticks () secara posisi sudah tidak digunakan lagi sejak Matplotlib 3.2; parameternya akan menjadi kata kunci - hanya dua rilis minor nanti." Apa solusi yang benar sekarang?
Rylan Schaeffer
2
@RylanSchaeffer ax.set_xticks([])untuk kutu besar, ax.set_xticks([], minor=True)untuk kutu kecil. Setara dengan pyplotare plt.xticks([])dan plt.xticks([], minor=True).
Anakhand
68

Berikut adalah solusi alternatif yang saya temukan di milis matplotlib :

import matplotlib.pylab as plt

x = range(1000)
ax = plt.axes()
ax.semilogx(x, x)
ax.xaxis.set_ticks_position('none') 

grafik

Tom Phillips
sumber
42

Ada solusi yang lebih baik, dan lebih sederhana, daripada yang diberikan oleh John Vinyard. Gunakan NullLocator:

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.show()
plt.savefig('plot')

Semoga itu bisa membantu.

dmcdougall
sumber
22
"Lebih baik" masih bisa diperdebatkan, tetapi +1 untuk alternatifnya.
mechanical_meat
Varian dari solusi ini juga bekerja untuk saya ketika tujuannya adalah untuk hanya menghapus xticks dari inset "diperbesar", sekaligus menyimpannya di plot utama. Menggunakan axins.xaxis.set_major_locator(plt.NullLocator()), di mana axinsobjek dikembalikan oleh axins = zoomed_inset_axes()(fungsi diimpor dari mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers
28

Coba ini untuk menghapus label (tetapi bukan kutu):

import matplotlib.pyplot as plt

plt.setp( ax.get_xticklabels(), visible=False)

contoh

auraham
sumber
3
setpdalam mode pylab, tidak dapat digunakan melawan sumbu individu
dashesy
1
Bagaimana dengan antarmuka berorientasi objek?
ifly6
Ini adalah satu-satunya jawaban yang juga berfungsi untuk plot 3D untuk saya. Terima kasih untuk ini!
Brent
13

Cuplikan ini mungkin membantu menghapus xticks saja.

from matplotlib import pyplot as plt    
plt.xticks([])

Cuplikan ini mungkin membantu dalam menghapus xticks dan yticks keduanya.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Amitrajit Bose
sumber
3
# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
Nishant Wattamwar
sumber
2
Versi berorientasi objek ini adalahax.tick_params()
Marcelo Villa-Piñeros
1
Juga, menggunakan offdan ontidak digunakan lagi. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
Marcelo Villa-Piñeros
0

Anda yang mencari perintah pendek untuk mematikan semua kutu dan label harus baik-baik saja

plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)

yang memungkinkan mengetikkan booluntuk masing-masing parameter sejak versi matplotlib> = 2.1.1

Untuk pengaturan centang khusus, dokumen sangat membantu:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.tick_params.html

hahnec
sumber