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)
在笔记本中产生:
获取默认 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 后