Указание порядка слоев 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 для меня?
2 ответов
Я не знаю, почему 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()
, что приводит к следующему:
для этого сюжета я указал противоположный порядок, показанный в вашем вопросе.
слои укладываются снизу вверх в том же порядке, что и соответствующие вызовы функции plot.
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()
из рисунка ниже ясно видно, что графики расположены в соответствии с Нижний первый, последний правило.