Matplotlib: desenha linhas de grade atrás de outros elementos gráficos

123

No Matplotlib, faço linhas de grade tracejadas da seguinte maneira:

fig = pylab.figure()    
ax = fig.add_subplot(1,1,1)
ax.yaxis.grid(color='gray', linestyle='dashed')

no entanto, não consigo descobrir como (ou mesmo se é possível) fazer com que as linhas de grade sejam desenhadas atrás de outros elementos do gráfico, como barras. Alterar a ordem de adicionar a grade versus adicionar outros elementos não faz diferença.

É possível fazer com que as linhas de grade apareçam atrás de todo o resto?

Andrew
fonte
10
ax.set_axisbelow(True)ainda funciona. Também agradável para saída pdf ...
bandgap
5
Eu teria esperado ax.set_axisbelow(True)para ser o padrão ...
PatrickT

Respostas:

122

De acordo com isso - http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html - você pode usarAxis.set_axisbelow(True)

(No momento, estou instalando o matplotlib pela primeira vez, por isso não faço ideia se isso está correto - eu o encontrei pesquisando "matplotlib z order grid" - "z order" é normalmente usado para descrever esse tipo de coisa (z é o eixo "fora da página"))

andrew cooke
fonte
É possível ter as linhas de grade abaixo da barra / linha, mantendo as etiquetas no topo? Eu também postou esta quesiton separadamente stackoverflow.com/questions/29522447/...
joelostblom
Pode ser este matplotlib.1069221.n5.nabble.com/… , tópico antigo.
Jacques Kvam
86

Para mim, não estava claro como aplicar a resposta de andrew cooke, portanto, esta é uma solução completa baseada nisso:

ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')
Stefan
fonte
34

Se você deseja validar a configuração para todas as figuras, pode definir

plt.rc('axes', axisbelow=True)

ou

plt.rcParams['axes.axisbelow'] = True

Funciona para o Matplotlib> = 2.0.

Syrtis Major
fonte
8

Eu tive o mesmo problema e o seguinte funcionou:

[line.set_zorder(3) for line in ax.lines]
fig.show() # to update

Aumente 3para um valor mais alto se não funcionar.

Saullo GP Castro
fonte