指定matplotlib图层的顺序

For*_*t17 31 python plot matplotlib layer

假设我运行以下脚本:

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()
Run Code Online (Sandbox Code Playgroud)

这产生以下结果:

在此输入图像描述

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

arm*_*ita 46

我不知道为什么会zorder出现这种行为,这可能是一个错误,或者至少是一个记录严重的功能.这可能是因为zorder在构建绘图(如网格,轴等等)时已经有自动引用,当您尝试指定zorderfor元素时,它们会以某种方式重叠它们.无论如何,这都是假设的.

为了解决您的问题,只需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()
Run Code Online (Sandbox Code Playgroud)

,结果如下:

在mataplotlib中处理zorder

对于这个图,我指定了你问题中显示的相反顺序.


小智 13

虽然 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()
Run Code Online (Sandbox Code Playgroud)

证明默认顺序随多种绘图类型而改变


Ton*_*has 6

这些图层从下到上按照对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()
Run Code Online (Sandbox Code Playgroud)

从下图可以清楚地看出,这些图是按照从到上,从上到下的规则排列的。

如何堆叠不同的地块

  • 要添加此功能,您可以设置 `ax.zorder` 来控制重叠的子图。这就是我需要的 (7认同)