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?


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


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')

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)

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


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.


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


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([])

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')

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.