2013-06-10 30 views
5

Minimal przykład pracy mojego kodu:matplotlib - Grid zawsze przed ax-H/V linii

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 
import numpy as np 
from scipy.ndimage.filters import gaussian_filter 
import numpy.random as nprnd 

x = nprnd.randint(1000, size=5000) 
y = nprnd.randint(1000, size=5000) 

xmin, xmax = min(x), max(x) 
ymin, ymax = min(y), max(y) 
rang = [[xmin, xmax], [ymin, ymax]] 
binsxy = [int((xmax - xmin)/80), int((ymax - ymin)/80)] 

H, xedges, yedges = np.histogram2d(x, y, range=rang, bins=binsxy) 
H_g = gaussian_filter(H, 2, mode='constant') 

xline = 6. 
yline = 4. 

fig = plt.figure(figsize=(5, 5)) # create the top-level container 
gs = gridspec.GridSpec(1, 1) # create a GridSpec object 
ax0 = plt.subplot(gs[0, 0]) 

# Set minor ticks 
ax0.minorticks_on() 
# Set grid 
ax0.grid(b=True, which='major', color='k', linestyle='-', zorder=1) 
ax0.grid(b=True, which='minor', color='k', linestyle='-', zorder=1) 
# Add vertical and horizontal lines 
plt.axvline(x=xline, linestyle='-', color='white', linewidth=4, zorder=2) 
plt.axhline(y=yline, linestyle='-', color='white', linewidth=4, zorder=2) 

plt.text(0.5, 0.91, 'Some text', transform = ax0.transAxes, \ 
bbox=dict(facecolor='white', alpha=1.0), fontsize=12) 

plt.imshow(H_g.transpose(), origin='lower') 

plt.show() 

który powraca w ten sposób:

plot

Jak widać, Siatka jest rysowana na na górze z linii axline & avline, chociaż ustawiam zorder na odwrót. Jak mogę to naprawić?

Używam Canopy v 1.0.1.1190.

+1

'siatka' ignoruje kwarg' zorder'. Siatka jest częścią obiektów "osi" dla osi X i Y, które mają "zorder" 2.5. – tacaswell

Odpowiedz

4

Twoja zorder=2 jest za mała.
Podnieś go zorder=3 i axline i avline będzie powyżej siatki i poniżej etykiecie:

plt.axvline(x=xline, linestyle='-', color='white', linewidth=4, zorder=3) 
plt.axhline(y=yline, linestyle='-', color='white', linewidth=4, zorder=3) 

enter image description here

jeśli były do ​​dalszego zwiększenia zorder np zorder=10, linie byłyby na wierzchu twojego oznaczenia some text.
Więcej informacji na temat ustawień domyślnych dla zorder-wartości można znaleźć here.

+0

@Gabriel: Czy ta odpowiedź jest dla ciebie przydatna? – Schorsch

+0

@Scorsch zdecydowanie, dziękuję bardzo! Przyjąłem już tę odpowiedź, chociaż jestem zdezorientowany, dlaczego muszę powiększyć 'zorder' do 3, gdy 2 _ powinno być wystarczające, ponieważ siatka jest narysowana z' zorder = 1'. W każdym razie, dzięki jeszcze raz. – Gabriel

+0

@Gabriel: Zgadzam się. Nie znalazłem jeszcze pełnej listy domyślnych ustawień 'zorder'. Jeśli to zrobię, włączę to tutaj. – Schorsch