web-dev-qa-db-fra.com

Comment puis-je supprimer les axes supérieur et droit dans matplotlib?

Au lieu du style d'axe "encadré" par défaut, je veux avoir uniquement les axes gauche et inférieur, c'est-à-dire:

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

Cela devrait être facile, mais je ne trouve pas les options nécessaires dans la documentation.

95
Michael Kuhn

Il s'agit de la solution Matplotlib 2.0 suggérée sur le site officiel ICI :

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

99
divenex

Alternativement, cela

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

semble obtenir le même effet sur un axe sans perdre le support d'étiquette tourné.

(Matplotlib 1.0.1; solution inspirée de this ).

62
timday

[modifier] matplotlib maintenant (2013-10) sur la version 1.3.0 qui inclut ceci

Cette capacité vient en fait d'être ajoutée, et vous avez besoin de la version Subversion pour cela. Vous pouvez voir l'exemple de code ici .

Je suis juste en train de mettre à jour pour dire qu'il y a un meilleur exemple en ligne maintenant. Cependant, vous avez toujours besoin de la version Subversion, il n'y a pas encore de version avec cela.

[modifier] Matplotlib 0.99.0 RC1 vient de sortir et inclut cette capacité.

32
Autoplectic

Si vous n'avez pas besoin de tiques et autres (par exemple pour tracer des illustrations qualitatives), vous pouvez également utiliser cette solution rapide:

Rendez l'axe invisible (par exemple avec plt.gca().axison = False), puis dessinez-le manuellement avec plt.arrow.

9
nikow

(Il s'agit davantage d'un commentaire d'extension, en plus des réponses complètes ici.)


Notez que nous pouvons masquer chacun de ces trois éléments indépendamment les uns des autres:

  • Pour masquer la bordure (aka "colonne vertébrale"): ax.set_frame_on(False) ou ax.spines['top'].set_visible(False)

  • Pour masquer les ticks: ax.tick_params(top=False)

  • Pour masquer les étiquettes: ax.tick_params(labeltop=False)

6
Evgeni Sergeev

La bibliothèque Seaborn l'a intégrée avec la fonction despine ().

Ajoutez simplement:

import seaborn as sns

Créez maintenant votre graphique. Et ajoutez à la fin:

sns.despine()

Si vous regardez certaines des valeurs de paramètre par défaut de la fonction, cela supprime la colonne vertébrale supérieure et droite et conserve la colonne vertébrale inférieure et gauche:

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

Consultez la documentation supplémentaire ici: https://seaborn.pydata.org/generated/seaborn.despine.html

4

Si vous devez le supprimer de tous vos tracés, vous pouvez supprimer les épines dans les paramètres de style (feuille de style ou rcParams). Par exemple:

import matplotlib as mpl

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

Si vous souhaitez supprimer toutes les épines:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
0
hadrienj