matplotlib zorder de elementos de gráfico polar sobrepostas no gráfico cartesiano
-
21-12-2019 - |
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 é:
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.
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: