2016-05-16 18 views
6

Przypuśćmy, uruchom następujący skrypt:Określanie kolejności warstw 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() 

produkuje to, co następuje:

enter image description here

Jak mogę określić górną do dołu zamówienie na zamiast używać Pythona?

+0

Widzę, że zorder ma coś z tym wspólnego. Ale nadal nie mogę go uruchomić tak, jak chcę. Jeśli ustawię zorda niebieskich, czerwonych i zielonych linii na 0, 1 i 2, czerwona linia jest tą, która idzie na wierzch. Czemu?? – Phys251

Odpowiedz

11

Nie wiem, dlaczego zorder ma to zachowanie i prawdopodobnie jest to błąd lub, co najmniej, udokumentowana funkcja. Może to być spowodowane automatycznymi odwołaniami do zorder podczas tworzenia wykresu (jak siatka, oś itp.) I podczas próby określenia elementów, które w pewien sposób pokrywają się z nimi. Jest to w każdym razie hipotetyczne.

Aby rozwiązać problem, przesadź różnice w zorder przesadnie. Na przykład zamiast 0,1,2, sprawiają, że 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() 

, co skutkuje tym:

Handling zorder in mataplotlib

dla tej działki ja określonej odwrotnej kolejności pokazanej na swoje pytanie.

2

Warstwy są układane od dołu do góry w tej samej kolejności odpowiadających wywołań funkcji wykresu.

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

jasno wynika z rysunku przedstawiono, że działki są rozmieszczone według pierwszy spód, górna ostatnia reguł.

How different plots are stacked

Powiązane problemy