matplotlib упорядочивает элементы в полярном графике, наложенном на декартовскую диаграмму
-
21-12-2019 - |
Вопрос
У меня возникли трудности с управлением расположением элементов полярного графика, наложенного на декартовскую диаграмму.
Рассмотрим этот пример:
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()
В результате получается:
Это выглядит как matplotlib
проигнорировал zorder
из точечных диаграмм.Я бы ожидал, что красная звезда будет находиться поверх синей.
Не могли бы вы, пожалуйста, объяснить, что я здесь делаю не так?
Я нашел один вопрос, который отчасти похож на мой, но вместо этого касается тиклайнов и сеток.Может быть, это одна и та же ошибка?
ПОСТСКРИПТУМ.Я использую Linux x86_64 с Python 2.7.6 и matplotlib 1.3.1.
Решение
Проблема в том, что вы устанавливаете z-порядок меток на разных осях ax
и ax2
но с тех пор, как ax2
имеет больший z-порядок, все графики в нем будут располагаться поверх ax
.Одним из решений могло бы быть установление более высокого z-порядка для ax
но тогда вам нужно сделать фон прозрачным или установить frameon=False
(и это, возможно, нежелательно для вашего случая), это демонстрация того, что я говорю:
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()
Сюжет: