Menyembunyikan teks sumbu dalam plot matplotlib

370

Saya mencoba memplot angka tanpa tanda centang atau angka pada salah satu sumbu (saya menggunakan sumbu dalam arti tradisional, bukan nomenklatur matplotlib!). Masalah yang saya temui adalah di mana matplotlib menyesuaikan ticklabels x (y) dengan mengurangi nilai N, kemudian menambahkan N di akhir sumbu.

Ini mungkin tidak jelas, tetapi contoh sederhana berikut menyoroti masalah, dengan '6,18' menjadi nilai N yang menyinggung:

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

Tiga hal yang ingin saya ketahui adalah:

  1. Cara mematikan perilaku ini sejak awal (walaupun dalam banyak kasus itu berguna, itu tidak selalu!) Saya telah melihat matplotlib.axis.XAxisdan tidak menemukan sesuatu yang sesuai

  2. Bagaimana saya bisa membuat N menghilang (yaitu X.set_visible(False))

  3. Apakah ada cara yang lebih baik untuk melakukan hal di atas? Plot terakhir saya adalah subplot 4x4 dalam gambar, jika itu relevan.

Dave
sumber
Saya punya sedikit keraguan apakah ada jawaban di sini yang benar-benar menjawab pertanyaan itu. Bagi saya, pertanyaannya adalah bagaimana cara menghilangkan offset . Namun semua jawaban menunjukkan berbagai cara bagaimana menghilangkan semua ticklabels. Jika pertanyaan telah diunggulkan oleh jawaban, mungkin orang harus mengedit pertanyaan untuk menanyakan untuk apa jawaban memberikan solusi?
ImportanceOfBeingErnest

Jawaban:

471

Alih-alih menyembunyikan setiap elemen, Anda dapat menyembunyikan seluruh sumbu:

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

Atau, Anda dapat mengatur kutu ke daftar kosong:

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

Dalam opsi kedua ini, Anda masih bisa menggunakan plt.xlabel()dan plt.ylabel()menambahkan label ke sumbu.

Ofri Raviv
sumber
2
Hai Ofri - itu bagus, terima kasih, tapi sekarang (hanya untuk menjadi canggung) apa yang terjadi jika saya ingin menambahkan xlabel ()? Selain menempatkan widget teks secara manual.
Dave
5
Bagaimana Anda dapat memperluas contoh ini ke 3d? ax = plt.gca (proyeksi = '3d'), ax.axes.get_zaxis (). set_visible (False) memberi'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762
13
Jawaban ini tidak mengizinkan garis kisi ditampilkan. Jawaban oleh @saullo castro tidak ...
evan54
Masalahnya adalah ketika x_axis disetel ke invisible, grid dsappears :( Sunting: Baru melihat jawaban @Saullo Castro yang memperbaiki masalahnya.
Shailen
1
@ user989762 Dalam kasus Anda, metode ini tidak akan berfungsi, bahkan tidak get_xaxis().set_visible(False). Saya pikir matplotlib dalam hal ini menginisialisasi beberapa parameter seolah-olah plotnya 2D. ax.set_zticks([])akan melakukan apa yang Anda inginkan
kon psych
222

Jika Anda ingin menyembunyikan hanya teks sumbu yang menjaga garis kisi:

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

Melakukan set_visible(False)atau set_ticks([])juga akan menyembunyikan garis kisi.

Saullo GP Castro
sumber
4
ini menghapus label untuk semua subplot yang berbagi sumbu itu: /
endolith
136

Jika Anda seperti saya dan tidak selalu mengambil sumbu ax,, ketika merencanakan angka, maka solusi sederhana adalah dengan melakukan

plt.xticks([])
plt.yticks([])
Ébe Isaac
sumber
56

Agak dari utas lama tapi, ini tampaknya menjadi metode yang lebih cepat menggunakan versi terbaru dari matplotlib:

atur formatter utama untuk sumbu x

ax.xaxis.set_major_formatter(plt.NullFormatter())
Nik Twerdochlib
sumber
1
Bagaimana jika Anda hanya ingin melakukannya untuk satu centang?
tommy.carstensen
5
Ya, ini berguna hanya untuk menyembunyikan label, karena .set_xticks ([]) juga menghilangkan tanda centang itu sendiri.
zbyszek
49

Saya sebenarnya tidak dapat membuat gambar tanpa batas atau data sumbu berdasarkan salah satu cuplikan kode di sini (bahkan yang diterima pada jawabannya). Setelah menggali beberapa dokumentasi API, saya mendarat di kode ini untuk membuat gambar saya

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)

Saya menggunakan tick_paramspanggilan pada dasarnya mematikan informasi tambahan yang mungkin diberikan dan saya memiliki grafik yang sempurna di file output saya.

GingerLoaf
sumber
1
Ketika sumbu dibagikan, solusi berdasarkan set_ticklabels merambat pada sumbu bersama. Hanya solusi ini berdasarkan tick_params yang bekerja dengan baik untuk saya.
Christian O'Reilly
39

Saya telah memberi kode warna pada gambar ini untuk mempermudah proses.

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

masukkan deskripsi gambar di sini

Anda dapat memiliki kontrol penuh atas gambar menggunakan perintah-perintah ini, untuk menyelesaikan jawaban yang saya tambahkan juga kontrol atas splines:

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)
GM
sumber
ax.set_xticklabels([])dan ax.set_xticks([])tidak bekerja untuk saya, tetapi ax.axes.get_xaxis().set_visible(False)berhasil.
Homero Esmeraldo
2
ini seharusnya jawaban yang diterima
Jason S
6

Saat menggunakan API berorientasi objek, Axesobjek memiliki dua metode yang berguna untuk menghapus teks sumbu, set_xticklabels()dan set_xticks().

Katakanlah Anda membuat plot menggunakan

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

Jika Anda hanya ingin menghapus label centang, Anda dapat menggunakannya

ax.set_xticklabels([])

atau untuk menghilangkan kutu sepenuhnya, Anda bisa menggunakan

ax.set_xticks([])

Metode-metode ini berguna untuk menentukan dengan tepat di mana Anda ingin kutu dan bagaimana Anda menginginkannya. Melewati daftar kosong menghasilkan tanpa kutu, atau tanpa label, masing-masing.

Steven C. Howell
sumber
2

Salah satu trik bisa dengan mengatur warna label centang sebagai putih untuk menyembunyikannya!

plt.xticks(color='w')
plt.yticks(color='w')
Venkatachalam
sumber