更改 pandas/matplotlib 线图的顺序而不更改数据顺序

mrk*_*tty 4 python matplotlib pandas

给出以下示例:

df = pd.DataFrame(np.random.randint(1,10, size=(8,3)), columns=list('XYZ'))
df.plot(linewidth=10)
Run Code Online (Sandbox Code Playgroud)

绘图的顺序将最后一列放在顶部:

在此输入图像描述

如何使其保持数据和图例顺序,但更改行为,以便将 X 绘制在 Y 之上,Z 之上?

(我知道我可以更改数据列顺序并编辑图例顺序,但我希望有一种更简单的方法,让数据保持原样)

更新:使用的最终解决方案:

(感谢 r-beginners)我使用 get_lines 修改每个图的 z 顺序

df = pd.DataFrame(np.random.randint(1,10, size=(8,3)), columns=list('XYZ'))
fig = plt.figure()
ax = fig.add_subplot(111)
df.plot(ax=ax, linewidth=10)
lines = ax.get_lines()
for i, line in enumerate(lines, -len(lines)):
    line.set_zorder(abs(i))
fig
Run Code Online (Sandbox Code Playgroud)

在笔记本中产生:

在此输入图像描述

r-b*_*ers 5

获取默认 zorder 并按所需顺序对其进行排序。


import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(2021)

df = pd.DataFrame(np.random.randint(1,10, size=(8,3)), columns=list('XYZ'))
ax = df.plot(linewidth=10)
l = ax.get_children()
print(l)
l[0].set_zorder(3)
l[1].set_zorder(1)
l[2].set_zorder(2)

Run Code Online (Sandbox Code Playgroud)

定义前

在此输入图像描述

定义 zorder 后

在此输入图像描述