2016-05-16 11 views
6

Supponiamo ho eseguito il seguente script:specificare l'ordine dei livelli matplotlib

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

Questo produce il seguente:

enter image description here

Come è possibile specificare l'ordine dall'alto verso il fondo della strati invece di avere Python pick per me?

+0

Vedo che lo zorder ha qualcosa a che fare con esso. Ma non riesco ancora a farlo funzionare come voglio. Se imposto lo zorder delle linee blu, rossa e verde su 0, 1 e 2 rispettivamente, la linea rossa è quella che si trova in cima. Perché?? – Phys251

risposta

11

Non so perché zorder ha questo comportamento ed è probabile che possa essere un bug o, per lo meno, una funzionalità mal documentata. Potrebbe essere perché ci sono già riferimenti automatici a zorder quando si costruisce un grafico (come griglia, asse e così via ...) e quando si tenta di specificare lo zorder per gli elementi in qualche modo si sovrappongono. Questo è ipotetico in ogni caso.

Per risolvere il problema, è sufficiente esagerare le differenze in zorder. Per esempio, invece di 0,1,2, renderlo 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() 

, che si traduce in questo:

Handling zorder in mataplotlib

Per questo grafico ho specificato nell'ordine opposto mostrato nella sua interrogazione.

2

I livelli vengono impilati dal basso verso l'alto nello stesso ordine delle chiamate corrispondenti alla funzione di stampa.

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

emerge chiaramente dalla figura seguente che le trame sono disposti secondo la fondo prima, all'inizio dell'ultimo regola.

How different plots are stacked

Problemi correlati