web-dev-qa-db-fra.com

Spécifier l'ordre des couches matplotlib

Supposons que je lance le script suivant:

import matplotlib.pyplot as plt

lineWidth = 20
plt.figure()
plt.plot([0,0],[-1,1], lw=lineWidth, c='b')
plt.plot([-1,1],[-1,1], lw=lineWidth, c='r')
plt.plot([-1,1],[1,-1], lw=lineWidth, c='g')
plt.show()

Cela produit les éléments suivants:

enter image description here

Comment puis-je spécifier l'ordre des couches au lieu d'avoir Python pick pour moi?

31
Forklift17

Je ne sais pas pourquoi zorder a ce comportement et il est probable qu'il s'agisse d'un bogue ou, à tout le moins, d'une fonctionnalité mal documentée. C'est peut-être parce qu'il y a déjà des références automatiques à zorder lorsque vous construisez un tracé (comme une grille, un axe, etc.) et lorsque vous essayez de spécifier le zorder pour les éléments que vous souhaitez. en quelque sorte les chevauchent. C'est hypothétique dans tous les cas.

Pour que votre problème soit résolu, il vous suffit d'exagérer les différences dans zorder. Par exemple au lieu de 0,1,2, fais-le 0,5,10:

import matplotlib.pyplot as plt

lineWidth = 20
plt.figure()
plt.plot([0,0],[-1,1], lw=lineWidth, c='b',zorder=10)
plt.plot([-1,1],[-1,1], lw=lineWidth, c='r',zorder=5)
plt.plot([-1,1],[1,-1], lw=lineWidth, c='g',zorder=0)
plt.show()

, ce qui entraîne:

Handling zorder in mataplotlib

Pour cette parcelle, j'ai précisé l'ordre inverse de votre question.

45
armatita

Les couches sont empilées de bas en haut dans le même ordre que les appels correspondants à la fonction de tracé.

import matplotlib.pyplot as plt

lineWidth = 30
plt.figure()

plt.subplot(2, 1, 1)                               # upper plot
plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='b')  # bottom blue
plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r')  # middle red
plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='g')    # top green

plt.subplot(2, 1, 2)                               # lower plot
plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='g')  # bottom green
plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r')  # middle red
plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='b')    # top blue

plt.show()

Il ressort clairement de la figure ci-dessous que les parcelles sont organisées selon la règle inférieure première, supérieure dernière .

How different plots are stacked

5
Tonechas