matplotlib упорядочивает элементы в полярном графике, наложенном на декартовскую диаграмму

StackOverflow https://stackoverflow.com//questions/22019789

Вопрос

У меня возникли трудности с управлением расположением элементов полярного графика, наложенного на декартовскую диаграмму.

Рассмотрим этот пример:

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

В результате получается:enter image description here

Это выглядит как 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()

Сюжет:

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top