2009-05-29 15 views

Odpowiedz

44

To sugeruje matplotlib 2,0 rozwiązanie z oficjalnej strony HERE:

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

enter image description here

+2

To jest lepsza niż zaakceptowana odpowiedź w nowszych wersjach matplotlib. – ffledgling

32

[edytuj] matplotlib się teraz (2013-10) od wersji 1.3.0, która zawiera ten

Zdolność faktycznie tylko dodaną i trzeba wersji Subversion dla niego. Możesz zobaczyć przykładowy kod here.

Właśnie aktualizuję, aby powiedzieć, że teraz jest lepszy example online. Nadal jednak potrzebna jest wersja Subversion, nie ma jeszcze wersji z tym.

[edytuj] Matplotlib 0.99.0 RC1 został właśnie wydany i obejmuje tę funkcję.

+0

upewnij się przeczytać ostrzeżenie przy http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.html o obsłudze znaczników jest niekompletne, zanim spróbujesz użyć powyższego z np. obróconymi etykietami! – timday

+2

Upewnij się, że Twoje modyfikacje są świetne. – tacaswell

+0

Wygląda na to, że zależy to od sposobu konstrukcji osi. Osie generowane przez '' mpl.subplots'' nie mogą być używane w ten sposób? –

7

Jeśli nie potrzebujesz kleszczy i takie (na przykład do kreślenia ilustracje jakościowe) można również użyć tego szybkiego rozwiązania:

sprawiają, że oś niewidoczne (na przykład z plt.gca().axison = False), a następnie narysować je ręcznie z plt.arrow.

+1

wydaje się to usuwać kolce, ale pozostawić znaczniki w miejscu. Masz pomysł, jak usunąć kleszcze? –

+1

@Rob: Masz rację, faktycznie użyłem innego rozwiązania w scenariuszu, o którym myślałem. Zmieniłem swoją odpowiedź, to powinno teraz działać, ale ogólnie przyjęte rozwiązanie jest lepsze. – nikow

56

Alternatywnie,

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

wydaje się osiągnąć ten sam efekt na osi bez utraty obrócony wsparcia etykiety.

(Matplotlib 1.0.1; rozwiązanie inspirowane przez this).

-4

Jest to o wiele bardziej prymitywny, ale może zrobić lewy:

remove_border()

0

(Jest to bardziej rozszerzenie komentarza, oprócz comprehe nsive odpowiedzi tutaj)


pamiętać, że możemy ukryć każdy z tych trzech elementów niezależnie od siebie.

  • Aby ukryć granicę (aka "kręgosłupa"): ax.set_frame_on(False) lub ax.spines['top'].set_visible(False)

  • Aby ukryć kleszczy: ax.tick_params(top=False)

  • Aby ukryć th e etykiety: ax.tick_params(labeltop=False)

Powiązane problemy