Указание порядка слоев matplotlib
Предположим, что я запускаю следующий скрипт:
import matplotlib.pyplot as plt
lineWidth = 20
plt.figure()
plt.plot([0,0],[-1,1], lw=lineWidth, c='b')
plt.plot([-1,1],[-1,1], lw=lineWidth, c='r')
plt.plot([-1,1],[1,-1], lw=lineWidth, c='g')
plt.show()
Это дает следующее:
Как я могу указать верхний порядок слоев вместо того, чтобы выбрать Python для меня?
Ответы
Ответ 1
Я не знаю, почему zorder
имеет такое поведение, и, вероятно, это может быть ошибка или, по крайней мере, плохо документированная функция. Возможно, это связано с zorder
при создании графика (например, сетке, оси и т.д.) Уже есть автоматические ссылки на zorder
и когда вы пытаетесь указать zorder
для элементов, вы каким-то образом перекрываете их. В любом случае это гипотетично.
Чтобы решить вашу проблему, просто сделайте различия в zorder
преувеличенными. Например, вместо 0,1,2
сделать его 0,5,10
:
import matplotlib.pyplot as plt
lineWidth = 20
plt.figure()
plt.plot([0,0],[-1,1], lw=lineWidth, c='b',zorder=10)
plt.plot([-1,1],[-1,1], lw=lineWidth, c='r',zorder=5)
plt.plot([-1,1],[1,-1], lw=lineWidth, c='g',zorder=0)
plt.show()
что приводит к следующему:
Для этого сюжета я указал противоположный порядок, указанный в вашем вопросе.
Ответ 2
Слои укладываются снизу вверх в том же порядке соответствующих вызовов функции графика.
import matplotlib.pyplot as plt
lineWidth = 30
plt.figure()
plt.subplot(2, 1, 1) # upper plot
plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='b') # bottom blue
plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r') # middle red
plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='g') # top green
plt.subplot(2, 1, 2) # lower plot
plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='g') # bottom green
plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r') # middle red
plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='b') # top blue
plt.show()
Из рисунка ниже ясно, что сюжеты расположены в соответствии с нижним первым, верхним последним правилом.