Suppose I run the following script:
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()
This produces the following:
How can I specify the top-to-bottom order of the layers instead of having Python pick for me?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
I don’t know why zorder has that behavior and it’s likely that might be a bug or, at the very least, a badly documented feature. It might be because there are already automatic references to zorder when you build a plot (like grid, axis, and so on…) and when you try to specify the zorder for elements you are somehow overlapping them. This is hypothetical in any case.
For you to solve your problem just make the differences in zorder exaggerated. For instance instead of 0,1,2, make it 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()
, which results in this:
For this plot I specified the opposite order shown in your question.
Method 2
While Tonechas is correct that the default order is back to front based on the order in which plots are called, it should be noted that using other plotting tools (scatter, errorbar, etc.) the default order is not as clear cut.
import matplotlib.pyplot as plt import numpy as np plt.errorbar(np.arange(0,10),np.arange(5,6,0.1),color='r',lw='3') plt.plot(np.arange(0,10),np.arange(0,10),'b', lw=3) plt.show()
Method 3
The layers are stacked from bottom to top in the same order of the corresponding calls to the plot function.
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()
It clearly emerges from the figure below that the plots are arranged according to the bottom first, top last rule.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0



