web-dev-qa-db-fra.com

afficher l'axe d'origine (x, y) dans le graphique matplotlib

J'ai un tracé simple suivant, et je voudrais afficher l'axe d'origine (x, y). J'ai déjà une grille, mais j'ai besoin que l'axe x, y soit accentué.

enter image description here

voici mon code:

x = linspace(0.2,10,100)
plot(x, 1/x)
plot(x, log(x))
axis('equal')
grid()

J'ai vu cette question. La réponse acceptée suggère d'utiliser "Axe spine" et juste des liens vers un exemple. L'exemple est cependant trop compliqué, utilisant des sous-tracés. Je n'arrive pas à comprendre comment utiliser "Axis spine" dans mon exemple simple.

30
Martin Vegter

Utiliser subplots n'est pas trop compliqué, les épines pourraient l'être.

Dumb, manière simple:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')

ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')

Et je reçois:

with axlines

(vous ne pouvez pas voir l'axe vertical car la limite x inférieure est zéro.)

Alternative utilisant des épines simples

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')

# set the x-spine (see below for more info on `set_position`)
ax.spines['left'].set_position('zero')

# turn off the right spine/ticks
ax.spines['right'].set_color('none')
ax.yaxis.tick_left()

# set the y-spine
ax.spines['bottom'].set_position('zero')

# turn off the top spine/ticks
ax.spines['top'].set_color('none')
ax.xaxis.tick_bottom()

with_spines

Alternative utilisant seaborn (mon préféré)

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set(style='ticks')

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')
seaborn.despine(ax=ax, offset=0) # the important part here

with_seaborn

Utilisation de la méthode set_position D'une colonne vertébrale

Voici les documents pour une méthode set_position D'épines :

La position de la colonne vertébrale est spécifiée par un 2 Tuple de (type de position, montant). Les types de postes sont:

  • "vers l'extérieur": placez la colonne vertébrale hors de la zone de données par le nombre de points spécifié. (Les valeurs négatives spécifient le placement du
    colonne vertébrale vers l'intérieur.)

  • 'axes': placez la colonne vertébrale à la coordonnée des axes spécifiée (de 0,0 à 1,0).

  • 'données': placez la colonne vertébrale à la coordonnée de données spécifiée.

De plus, les notations abrégées définissent des positions spéciales:

  • 'centre' -> ('axes', 0,5)
  • "zéro" -> ("données", 0,0)

Vous pouvez donc placer, par exemple, la colonne vertébrale gauche n'importe où avec:

ax.spines['left'].set_position((system, poisition))

system est 'outward', 'axes' ou 'data' et position à la place dans ce système de coordonnées.

53
Paul H