matplotlib zorder de elementos en el gráfico polar superpuesto al gráfico cartesiano
-
21-12-2019 - |
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:
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.
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: