Pytanie Jak mogę usunąć górną i prawą oś w matplotlib?


Zamiast domyślnego stylu osi "boxed" chcę mieć tylko lewą i dolną oś, tzn .:

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

To powinno być łatwe, ale nie mogę znaleźć niezbędnych opcji w dokumentach.


76
2018-05-29 08:45


pochodzenie




Odpowiedzi:


Jest to sugerowane rozwiązanie Matplotlib 2.0 z oficjalnej strony internetowej TUTAJ:

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


63
2017-12-08 15:58



To jest lepsze niż zaakceptowana odpowiedź w nowszych wersjach matplotlib. - ffledgling


Alternatywnie, to

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ę, że osiąga ten sam efekt na osi bez utraty obróconego wsparcia dla etykiet.

(Matplotlib 1.0.1, rozwiązanie inspirowane przez to).


59
2017-11-04 15:20





[edytuj] matplotlib w teraz (2013-10) w wersji 1.3.0, która obejmuje to

Ta zdolność została właśnie dodana i potrzebujesz wersji Subversion. Możesz zobaczyć przykładowy kod tutaj.

Aktualizuję tylko, aby powiedzieć, że jest coś lepszego przykład teraz 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 zawiera tę możliwość.


31
2018-05-29 09:21



Upewnij się, że przeczytałeś ostrzeżenie na matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/... o tym, że obsługa znaczników jest niekompletna, zanim spróbujesz użyć powyższego z np. obróconymi etykietami! - timday
Upewnij się, że Twoje modyfikacje są świetne. - tacaswell
Wygląda na to, że zależy to od tego, jak zbudujesz oś. Osie generowane przez mpl.subplots nie można użyć w ten sposób? - Stefan van der Walt
Przykładowy link jest teraz uszkodzony. - mkosmala


Jeśli nie potrzebujesz kleszczy i innych (np. Do wykreślania jakościowych ilustracji), możesz również użyć tego szybkiego rozwiązania:

Spraw, aby oś była niewidoczna (np plt.gca().axison = False), a następnie narysuj je ręcznie za pomocą plt.arrow.


7
2018-05-29 10:06



wydaje się, że usuwa kolce, ale pozostawia zaznaczenia w miejscu. Masz pomysł, jak usunąć kleszcze? - Rob Young
@Rob: Masz rację, właściwie 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


(Jest to raczej komentarz do rozszerzenia, oprócz wyczerpujących odpowiedzi tutaj).


Zauważ, że możemy ukryć każdy z tych trzech elementów niezależnie od siebie:

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

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

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


1
2017-12-27 10:10





Biblioteka Seaborn ma wbudowaną funkcję despine ().

Poprostu dodaj:

import seaborn as sns

Teraz utwórz swój wykres. I dodaj na końcu:

sns.despine()

Jeśli spojrzysz na niektóre z domyślnych wartości parametrów tej funkcji, usuwa ona górny i prawy grzbiet i utrzymuje dolny i lewy grzbiet:

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

Sprawdź dalszą dokumentację tutaj: https://seaborn.pydata.org/generated/seaborn.despine.html


0
2017-07-05 07:48





Jest to o wiele bardziej elementarne, ale może załatwić sprawę:

remove_border ()


-4
2018-01-11 05:44