2016-03-03 12 views
7

Zastanawiam się, czy istnieje sposób kontrolowania, która działka znajduje się na innych działkach, jeśli tworzy się wiele wykresów na jednej osi. Przykład:Kontrolka Matplotlib, która działka znajduje się na górze

enter image description here

Jak widać, zielona seria jest na górze niebieski serii, a obie serie są na górze czarnych kropek (co zrobiłem z wykresu rozrzutu). Chciałbym, żeby czarne kropki były na wierzchu obu serii (linii).

raz pierwszy zrobił to powyżej z następującego kodu

plt.plot(series1_x, series1_y) 
plt.plot(series2_x, series2_y) 
plt.scatter(series2_x, series2_y) 

Potem próbowałem następujące

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y) 

a niektóre wariacje na tym, ale bez powodzenia.

Zamiana funkcji plot wpływa na to, który wykres jest na wierzchu, ale bez względu na to, gdzie umieszczę funkcję scatter, linie są na wierzchu kropek.

UWAGA:

Używam Pythona 3.5 w systemie Windows 10 (ten przykład), ale przede wszystkim Pythonie 3.4 na Ubuntu.

UWAGA 2:

wiem, może to wydawać się trywialny problem, ale mam przypadek, w którym serie na szczycie kropkami są tak gęste, że kolor kropki uzyskać zasłonięte, aw w tych przypadkach potrzebuję moich czytelników, aby jasno zobaczyli, które kropki są w jakim kolorze, dlatego potrzebuję kropek, które będą na górze.

+0

Dlaczego odtwarzasz osie podpoziomów dla każdego nowego wykresu? Możesz po prostu utworzyć jeden wątek, a następnie wykonać wszystkie swoje kreślenia (i użyć zordera, jak w poniższych odpowiedziach, aby kontrolować, co jest na górze). – tom

+0

Wspomniałem, że zrobiłem "pewne odmiany" na tym, co tam pokazałem - zrobiłem rób to tylko z podpichem. Zwykle robię to po prostu z plt.plot, plt.scatter itp.Zwykle nie martwię się o siekiery i obiekty figur, chyba że muszę przekazać je innym funkcjom i robić różne fantazyjne rzeczy. –

Odpowiedz

12

Użyj parametru zorder kwarg, w którym im niższy zorder, tym bardziej z powrotem wykres, np.

plt.plot(series1_x, series1_y, zorder=1) 
plt.plot(series2_x, series2_y, zorder=2) 
plt.scatter(series2_x, series2_y, zorder=3) 
+0

Świetnie, działa idealnie. Ładne eleganckie rozwiązanie. Zakładam, że wartość 'zorder' domyślnie przyjmuje' zorder' poprzedniego wykresu, zaczynając od jednego? Powiedzmy, że po prostu robię "spisek" (pierwszy) bez 'zorder', że' plot' ma 'zorder = 1', następny' spisek' (bez określenia 'zorder') ma' zorder = 2', itp..? –

+0

Przepraszam, w powyższym komentarzu miałem na myśli, że wartość "zorder" domyślnie wynosi jeden plus wartość 'zorder' z poprzedniego wykresu ..." –

+0

Tak, wygląda to w moich testach. – bernie

1

Inne rozwiązanie oprócz używania zorderu i warte poznania: Możesz po prostu wykreślić punkt rozproszenia za pomocą polecenia fabuły. Coś jak plot(series2_x, series2_y, ' o'). Uwaga: ' o' ze spacją oznacza brak linii, ale punkty kołowe. W ten sposób kolejność nanoszenia ich na osie umieszcza je na wierzchu.

+0

To również działa, dziękuję. Jak ustawić rozmiar znacznika, jeśli miałbym użyć "spisku"? Używając 'scatter', po prostu ustawiam parametr' s', aby ustawić rozmiar. –

+1

Dla konkretnego pytania możesz dodać argument "markersize = 10' lub" ms = 10' (lub dowolną liczbę) do polecenia plotowania. Pełną listę argumentów i funkcji można znaleźć tutaj: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot – zephyr

1

Tak, możesz. Po prostu użyj parametru zorder. Im wyższa wartość, tym więcej na górze wykresu.

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y, zorder=3) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, zorder=4) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y, zorder=5) 

Można również wykonać wykres linii i znacznik w tym samym czasie. Możesz nawet ustawić różne kolory linii i twarzy znacznika.

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, '-o', color='b', mfc='k') 

'-o' zestawy wykres styl linii markerami koło, color='b' zestawy kolor linii na niebieski i mfc='k' ustawia kolor czarny kryjący twarz.

+0

Nie wiesz, dlaczego ta odpowiedź została odrzucona - podała te same informacje, co druga (dobra) odpowiedzi, a także dał przyzwoitą alternatywę. –

Powiązane problemy