Pergunta

Eu estou tendo uma dificuldade em controlar o zorder dos elementos de um gráfico polar sobrepostos em um gráfico cartesiano.

Considere este exemplo:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(1, 1, marker='*', s=2000, c='r', zorder=2)
ax2 = fig.add_axes(ax.get_position(), frameon=False, polar=True)
ax2.scatter(1., 0.1, marker='*', s=1000, c='b', zorder=1)
plt.xlim(0, 2)
plt.ylim(0, 2)
plt.show()

O resultado é:enter image description here

Parece matplotlib ignorou o zorder de gráficos de dispersão.Eu esperaria que o estrela vermelha de estar em cima do azul.

Você poderia por favor explicar o que eu estou fazendo de errado aqui?

Eu encontrei uma pergunta, o que é semelhante a minha, mas as preocupações ticklines e grades em vez disso.Talvez seja o mesmo bug?

P. S.Eu estou com o Linux x86_64 com Python 2.7.6 e matplotlib 1.3.1.

Foi útil?

Solução

O problema é que você está definindo a ordem z das marcas em diferentes eixos ax e ax2 mas desde que ax2 tem uma z-ordem de todas as parcelas em que seja em cima de ax.Uma solução poderia ser a de definir um maior ordem-z para ax mas, em seguida, você precisa para tornar o fundo transparente ou conjunto de frameon=False (e que pode não ser desejável para o seu caso), esta é uma demonstração do que estou dizendo:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.scatter(1, 1, marker='*', s=2000, c='r', zorder=2)

ax2 = fig.add_axes(ax.get_position(), frameon=False, polar=True)
ax2.scatter(1., 0.1, marker='*', s=1000, c='b', zorder=1)

ax.set_zorder(3)
ax.patch.set_facecolor('none')
#ax.patch.set_visible(False)

plt.xlim(0, 2)
plt.ylim(0, 2)
plt.show()

Enredo:

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top