Matplotlib grafiklerinde eksen metnini gizleme


370

Eksenlerden birinde işaret ya da sayı içermeyen bir figür çizmeye çalışıyorum (geleneksel anlamda eksenleri kullanıyorum, matplotlib isimlendirmesini kullanmıyorum!). Karşılaştığım bir sorun, matplotlib'in x (y) işaret etiketlerini N değerini çıkararak ayarlaması ve ardından eksenin sonuna N eklemesidir.

Bu belirsiz olabilir, ancak aşağıdaki basitleştirilmiş örnek sorunu vurgular, '6.18' N'nin rahatsız edici değeridir:

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

Bilmek istediğim üç şey:

  1. İlk etapta bu davranışı nasıl kapatabilirim (çoğu durumda faydalı olsa da, her zaman değil!) Aradım matplotlib.axis.XAxisve uygun bir şey bulamıyorum

  2. N'yi nasıl yok edebilirim (yani X.set_visible(False))

  3. Yukarıdakileri yapmanın daha iyi bir yolu var mı? Nihai çizimim, eğer uygunsa, bir şekildeki 4x4 alt grafik olacaktır.


Buradaki cevaplardan herhangi birinin soruyu gerçekten cevapladığı konusunda biraz şüphem var. Bana göre soru ofsetten nasıl kurtulacağını soruyor gibi görünüyor . Yine de tüm cevaplar, tüm işaret etiketlerinden nasıl kurtulacağının çeşitli yollarını göstermektedir . Eğer soru cevaplar yerine geçtiyse, cevapların ne için çözüm sağladığını sormak için belki soruyu düzenlemelisiniz?
ImportanceOfBeingErnest

Yanıtlar:


471

Her öğeyi gizlemek yerine, tüm ekseni gizleyebilirsiniz:

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

Veya keneleri boş bir listeye ayarlayabilirsiniz:

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

Bu ikinci seçenekte, hala kullanabilir plt.xlabel()ve plt.ylabel()eksenler etiket eklemek için.


2
Hey Ofri - bu harika, teşekkürler, ama şimdi (sadece garip olmak için) xlabel () eklemek istersem ne olur? Manuel olarak bir metin widget'ı yerleştirmekten başka.
Dave

5
Bu örneği 3B'ye nasıl genişletebilirsiniz? ax = plt.gca (projeksiyon = '3d'), ax.axes.get_zaxis (). set_visible (False) verir'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762

13
Bu yanıt ızgara çizgilerinin gösterilmesine izin vermez. @Saullo castro tarafından cevap olsa ...
evan54

Sorun, x_axis görünmez olarak ayarlandığında, ızgara dsappears :( Düzenleme: Sadece @Saullo Castro'nun sorunu düzelten cevabını gördüm.
Shailen

1
@ user989762 Sizin durumunuzda bu yöntem çalışmaz, hatta çalışmaz get_xaxis().set_visible(False). Bu durumda matplotlib, sanki arsa 2B gibi bazı parametreleri başlatır düşünüyorum. ax.set_zticks([])ne istediğinizi yapacak
kon psych

222

Izgara çizgilerini koruyan yalnızca eksen metnini gizlemek istiyorsanız:

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

Yapmak set_visible(False)veya set_ticks([])ızgara çizgilerini de gizleyecektir.


4
bu, bu ekseni paylaşan tüm alt grafiklerin etiketlerini siler : /
endolith

136

Eğer benim gibiyseniz ve her zaman eksenleri almazsanız ax, figürü çizerken, basit bir çözüm yapmak

plt.xticks([])
plt.yticks([])

56

Biraz eski bir iş parçacığına rağmen, bu matplotlib'in en son sürümünü kullanarak daha hızlı bir yöntem gibi görünüyor:

x ekseni için ana biçimlendiriciyi ayarlama

ax.xaxis.set_major_formatter(plt.NullFormatter())

1
Ya sadece tek bir kene için yapmak istiyorsan?
tommy.carstensen

5
Evet, bu yalnızca etiketleri gizlemek için kullanışlıdır, çünkü .set_xticks ([]) onay işaretlerini kendileri de kaldırır.
zbyszek

49

Aslında burada kod parçacıkları (hatta yanıtta kabul edilen) herhangi birine dayalı sınırlar veya eksen verileri olmadan bir görüntü oluşturmak mümkün değildi. Bazı API belgelerini inceledikten sonra resmimi oluşturmak için bu koda indim

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_paramsTemelde, oluşturulabilecek ek bilgileri kapatmak için aramayı kullandım ve çıktı dosyamda mükemmel bir grafik var.


1
Eksenler paylaşıldığında, set_ticklabels tabanlı çözümler paylaşılan eksenler üzerinde yayılır. Sadece tick_params tabanlı bu çözüm benim için iyi çalışıyordu.
Christian O'Reilly

39

İşlemi kolaylaştırmak için bu rakamı renkle kodladım.

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

resim açıklamasını buraya girin

Bu komutları kullanarak şekil üzerinde tam kontrole sahip olabilirsiniz, yanıtı tamamlamak için spline üzerinde kontrolü de ekledim:

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)

ax.set_xticklabels([])ve ax.set_xticks([])benim için çalışmadı, ama işe ax.axes.get_xaxis().set_visible(False)yaradı.
Homero Esmeraldo

2
kabul edilen cevap bu olmalıdır
Jason S

6

Nesneye yönelik API kullanırken, nesnenin Axeseksen metnini kaldırmak için iki yararlı yöntemi vardır set_xticklabels()veset_xticks() .

Kullanarak bir komplo oluşturduğunuzu varsayalım

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

Yalnızca onay etiketlerini kaldırmak istiyorsanız şunu kullanabilirsiniz:

ax.set_xticklabels([])

veya keneleri tamamen kaldırmak için

ax.set_xticks([])

Bu yöntemler, kenelerin tam olarak nerede olmasını ve nasıl etiketlenmesini istediğinizi belirtmek için kullanışlıdır. Boş bir listenin iletilmesi, sırasıyla kenelere veya etiketlere neden olmaz.


2

Bir numara, gizlemek için kene etiketlerinin rengini beyaz olarak ayarlamak olabilir!

plt.xticks(color='w')
plt.yticks(color='w')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.