Pregunta

Tengo dificultades para controlar el orden z de los elementos de un gráfico polar superpuesto a un gráfico cartesiano.

Considere este ejemplo:

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

El resultado es:enter image description here

Parece que matplotlib ignoró el zorder de diagramas de dispersión.Esperaría que la estrella roja estuviera encima de la azul.

¿Podrías explicar qué estoy haciendo mal aquí?

encontré una pregunta, que es algo similar al mío, pero se refiere a líneas de ticks y cuadrículas.¿Quizás sea el mismo error?

PDEstoy ejecutando Linux x86_64 con Python 2.7.6 y matplotlib 1.3.1.

¿Fue útil?

Solución

El problema es que estás configurando el orden z de las marcas en diferentes ejes. ax y ax2 pero desde ax2 tiene un orden z mayor, todos los gráficos que contiene estarán encima de ax.Una solución podría ser establecer un orden z más alto para ax pero luego necesitas hacer que el fondo sea transparente o configurarlo frameon=False (y eso tal vez no sea deseable para su caso), esta es una demostración de lo que estoy diciendo:

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

Trama:

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top