2012-07-10 6 views

Odpowiedz

15

jak wskazano przez @imsc, Możesz poprawić widoczność znaczników, ustawiając pozycję znaczników na dole i na lewo (jeśli nie chcesz ich na górze i na prawo), używając metod ax.xaxis.set_ticks_position i ax.yaxis.set_ticks_position.

Jeśli chcesz ustawić samą oś niewidoczną, sprawdź klasę matplotlib.spines. Musisz tylko ustawić kolor kolców na none używając metody ax.spines[spine].set_color.

Jeśli masz dużo wykresów do wyświetlenia i nie chcesz ręcznie obracać osi/tyknięć, poniżej znajdziesz funkcję, która wykona zadanie za ciebie.

Zasadniczo dla każdej osi definiuje się żądany kolor (w tym przypadku none spowoduje, że będzie on niewidoczny), a funkcja będzie również "wyłączała" znaczniki dla wszystkich osi niewidocznych. Dodałem także opcje definiowania linewidth linii osi, a także fontsize ticklabeli i pad między ticklabels a ticks.

def customaxis(ax, c_left='k', c_bottom='k', c_right='none', c_top='none', 
       lw=3, size=12, pad=8): 

    for c_spine, spine in zip([c_left, c_bottom, c_right, c_top], 
           ['left', 'bottom', 'right', 'top']): 
     if c_spine != 'none': 
      ax.spines[spine].set_color(c_spine) 
      ax.spines[spine].set_linewidth(lw) 
     else: 
      ax.spines[spine].set_color('none') 
    if (c_bottom == 'none') & (c_top == 'none'): # no bottom and no top 
     ax.xaxis.set_ticks_position('none') 
    elif (c_bottom != 'none') & (c_top != 'none'): # bottom and top 
     ax.tick_params(axis='x', direction='out', width=lw, length=7, 
         color=c_bottom, labelsize=size, pad=pad) 
    elif (c_bottom != 'none') & (c_top == 'none'): # bottom but not top 
     ax.xaxis.set_ticks_position('bottom') 
     ax.tick_params(axis='x', direction='out', width=lw, length=7, 
         color=c_bottom, labelsize=size, pad=pad) 
    elif (c_bottom == 'none') & (c_top != 'none'): # no bottom but top 
     ax.xaxis.set_ticks_position('top') 
     ax.tick_params(axis='x', direction='out', width=lw, length=7, 
         color=c_top, labelsize=size, pad=pad) 
    if (c_left == 'none') & (c_right == 'none'): # no left and no right 
     ax.yaxis.set_ticks_position('none') 
    elif (c_left != 'none') & (c_right != 'none'): # left and right 
     ax.tick_params(axis='y', direction='out', width=lw, length=7, 
         color=c_left, labelsize=size, pad=pad) 
    elif (c_left != 'none') & (c_right == 'none'): # left but not right 
     ax.yaxis.set_ticks_position('left') 
     ax.tick_params(axis='y', direction='out', width=lw, length=7, 
         color=c_left, labelsize=size, pad=pad) 
    elif (c_left == 'none') & (c_right != 'none'): # no left but right 
     ax.yaxis.set_ticks_position('right') 
     ax.tick_params(axis='y', direction='out', width=lw, length=7, 
         color=c_right, labelsize=size, pad=pad) 

Poniżej jest przykład, jak go używać:

import numpy as np 
import matplotlib.pyplot as plt 

fig, ([ax1, ax2], [ax3, ax4]) = plt.subplots(nrows=2, ncols=2) 

for ax in [ax1, ax2, ax3, ax4]: 
    ax.plot(np.random.randn(10), lw=2) 

customaxis(ax1) #default: no right and top axis 
customaxis(ax2, c_left='none', c_bottom='none', c_right='k', c_top='k') 
customaxis(ax3, c_left='none', c_bottom='k', c_right='k', c_top='none') 
customaxis(ax4, c_left='k', c_bottom='none', c_right='none', c_top='k') 

plt.show() 

spines

9

tick_params powinno wystarczyć.

nie mam matplotlib zainstalowane na danym komputerze, więc nie mogę go przetestować, ale to powinno działać:

import matplotlib.pyplot as plt 

ax = plt.subplot(111) 
plt.plot([0,1], [0,1]) 
ax.tick_params(labeltop='off', labelright='off') 
plt.show() 
1
plt.tick_params(top='off', right='off', which='both') 

użyłem powyżej kodu z 'on' zamiast 'off', do wyświetlania znaków podziałki u góry i prawo wraz z domyślnym "dolnym" i "lewym", w matplotlib 2.0

+0

Witaj w SO! Proszę sformatować odpowiedź, aby ułatwić jej czytanie, patrz przycisk pomocy formatowania po prawej stronie pola edycji, gdy edytujesz odpowiedź. –