Matplotlib'de üst ve sağ ekseni nasıl kaldırabilirim?


134

Varsayılan "kutulu" eksen stili yerine yalnızca sol ve alt eksene sahip olmak istiyorum, yani:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

Bu kolay olmalı, ancak gerekli seçenekleri belgelerde bulamıyorum.

Yanıtlar:


155

Bu, resmi web sitesinden önerilen Matplotlib 3 çözümü BURADA :

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()

görüntü açıklamasını buraya girin


2
Bu, matplotlib'in yeni sürümlerinde kabul edilen cevaptan daha iyidir.
ffledgling

4
Yeni başlayanlar için ek soru: Bu yanıtı Matplotlib API belgesine göre nerede bulabilirsiniz? Oraya gidersem: matplotlib.org/api/axes_api.htmlspine Nesneye herhangi bir referans görmüyorum ve bu anahtar kelimeyi tahmin edemezdim.
Eric Burel

63

Alternatif olarak, bu

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()

Döndürülmüş etiket desteğini kaybetmeden bir eksende aynı etkiyi elde ediyor gibi görünüyor.

(Matplotlib 1.0.1; esinlenerek çözelti Bu ).


33

[değiştir] matplotlib şimdi (2013-10) 1.3.0 sürümünde bunu içeren

Bu yetenek aslında yeni eklendi ve bunun için Subversion sürümüne ihtiyacınız var. Örnek kodu burada görebilirsiniz .

Şimdi çevrimiçi olarak daha iyi bir örnek olduğunu söylemek için güncelleme yapıyorum . Yine de Subversion sürümüne ihtiyaç var, ancak bununla ilgili bir sürüm henüz yapılmadı.

[değiştir] Matplotlib 0.99.0 RC1 piyasaya çıktı ve bu özelliği içeriyor.


Yukarıdakileri örneğin döndürülmüş etiketlerle kullanmayı denemeden ve kullanmadan önce , matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/… adresindeki tik işareti desteğinin eksik olduğuna dair uyarıyı okuduğunuzdan emin olun !
timday

Ekseni nasıl oluşturduğunuza bağlı gibi görünüyor. Tarafından üretilen eksenler mpl.subplotsbu şekilde kullanılamaz mı?
Stefan van der Walt

8
Örnek bağlantı artık kopmuştur.
mkosmala

10

(Bu, buradaki kapsamlı yanıtlara ek olarak daha çok bir uzantı yorumudur.)


Bu üç öğenin her birini birbirinden bağımsız olarak gizleyebileceğimizi unutmayın:

  • Sınırı gizlemek için ("sırt" olarak da bilinir): ax.set_frame_on(False)veyaax.spines['top'].set_visible(False)

  • Keneleri gizlemek için: ax.tick_params(top=False)

  • Etiketleri gizlemek için: ax.tick_params(labeltop=False)


olasılıkların güzel bir özeti. +1
sevdim.by.Jesus

9

Eğer kenelere ve benzerlerine ihtiyacınız yoksa (örneğin nitel çizimleri çizmek için) şu hızlı çözümü de kullanabilirsiniz:

Ekseni görünmez yapın (örn. İle plt.gca().axison = False) ve ardından ile manuel olarak çizin plt.arrow.


1
bu dikenleri kaldırıyor gibi görünüyor, ancak onay işaretlerini yerinde bırakıyor. Kenelerin nasıl çıkarılacağına dair bir fikriniz var mı?
Rob Young

2
@Rob: Haklısın, aslında düşündüğüm senaryoda farklı bir çözüm kullandım. Cevabımı değiştirdim, bu şimdi işe yaramalı, ancak genel olarak yukarıda kabul edilen çözüm daha iyidir.
nikow

9

Seaborn kütüphanesi, despine () fonksiyonu ile bu yerleşiktir.

Sadece ekle:

import seaborn as sns

Şimdi grafiğinizi oluşturun. Ve sonuna ekleyin:

sns.despine()

İşlevin bazı varsayılan parametre değerlerine bakarsanız, üst ve sağ omurgayı kaldırır ve alt ve sol omurgayı korur:

sns.despine(top=True, right=True, left=False, bottom=False)

Diğer belgelere buradan göz atın: https://seaborn.pydata.org/generated/seaborn.despine.html


7

Tüm grafiklerden kaldırmanız gerekirse, stil ayarlarında (stil sayfası veya rcParams) dikenleri kaldırabilirsiniz. Örneğin:

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False

Tüm dikenleri çıkarmak istiyorsanız:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
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.