matplotlib 指定图层的顺序

disho6za  于 2023-06-23  发布在  其他
关注(0)|答案(3)|浏览(115)

假设我运行以下脚本:

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为我选择?

3b6akqbq

3b6akqbq1#

我不知道为什么zorder会有这种行为,很可能是一个bug,或者至少是一个文档记录不好的特性。这可能是因为当你构建一个图(比如网格、轴等)时,已经有了对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()

结果如下:

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

dy2hfwbg

dy2hfwbg2#

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

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

disbfnqx

disbfnqx3#

这些层以与对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()

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

相关问题