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?


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


É 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')

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.