指定matplotlib图层的顺序

6kkfgxo0  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(175)

假设我运行以下脚本:

  1. import matplotlib.pyplot as plt
  2. lineWidth = 20
  3. plt.figure()
  4. plt.plot([0,0],[-1,1], lw=lineWidth, c='b')
  5. plt.plot([-1,1],[-1,1], lw=lineWidth, c='r')
  6. plt.plot([-1,1],[1,-1], lw=lineWidth, c='g')
  7. plt.show()

这将产生以下结果:

如何指定层的自上而下顺序,而不是让Python为我选择?

ttcibm8c

ttcibm8c1#

我不知道为什么zorder会有这样的行为,这可能是一个bug,或者至少是一个文档记录不好的特性。(比如网格、轴等等......),而当你试图为元素指定zorder时,你会以某种方式重叠它们。
为了解决你的问题,你可以把zorder中的差异放大,比如把0,1,2改成0,5,10

  1. import matplotlib.pyplot as plt
  2. lineWidth = 20
  3. plt.figure()
  4. plt.plot([0,0],[-1,1], lw=lineWidth, c='b',zorder=10)
  5. plt.plot([-1,1],[-1,1], lw=lineWidth, c='r',zorder=5)
  6. plt.plot([-1,1],[1,-1], lw=lineWidth, c='g',zorder=0)
  7. plt.show()

结果是:

对于这个图,我指定了与您的问题相反的顺序。

展开查看全部
oxalkeyp

oxalkeyp2#

虽然Tonechas的默认顺序是基于调用绘图的顺序从后到前是正确的,但应该注意的是,使用其他绘图工具(散点图、误差条等)时,默认顺序并不清晰。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. plt.errorbar(np.arange(0,10),np.arange(5,6,0.1),color='r',lw='3')
  4. plt.plot(np.arange(0,10),np.arange(0,10),'b', lw=3)
  5. plt.show()

dced5bon

dced5bon3#

这些层将按照相应的plot函数调用顺序从下到上堆叠。

  1. import matplotlib.pyplot as plt
  2. lineWidth = 30
  3. plt.figure()
  4. plt.subplot(2, 1, 1) # upper plot
  5. plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='b') # bottom blue
  6. plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r') # middle red
  7. plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='g') # top green
  8. plt.subplot(2, 1, 2) # lower plot
  9. plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='g') # bottom green
  10. plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r') # middle red
  11. plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='b') # top blue
  12. plt.show()

从下图中可以清楚地看出,图是按照底部优先,顶部最后规则排列的。

展开查看全部

相关问题