Matplotlib:如何调整第二个传奇的zorder?

时间:2014-09-14 03:14:38

标签: python matplotlib

以下是重现我的问题的示例:

import matplotlib.pyplot as plt
import numpy as np

data1,data2,data3,data4 = np.random.random(100),np.random.random(100),np.random.random(100),np.random.random(100)

fig,ax = plt.subplots()

ax.plot(data1)
ax.plot(data2)
ax.plot(data3)

ax2 = ax.twinx()
ax2.plot(data4)

plt.grid('on')
ax.legend(['1','2','3'], loc='center')
ax2.legend(['4'], loc=1)

enter image description here

如何让中心的图例在线条上方绘制?

1 个答案:

答案 0 :(得分:4)

要准确了解您的要求,请尝试以下操作。注意我已经修改了你的代码来定义生成绘图时的标签以及颜色,这样你就不会得到重复的蓝线。

import matplotlib.pyplot as plt
import numpy as np

data1,data2,data3,data4 = (np.random.random(100),
                           np.random.random(100),
                           np.random.random(100),
                           np.random.random(100))

fig,ax = plt.subplots()

ax.plot(data1, label="1", color="k")
ax.plot(data2, label="2", color="r")
ax.plot(data3, label="3", color="g")

ax2 = ax.twinx()
ax2.plot(data4, label="4", color="b")

# First get the handles and labels from the axes
handles1, labels1 = ax.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()

# Add the first legend to the second axis so it displaysys 'on top'
first_legend = plt.legend(handles1, labels1, loc='center')
ax2.add_artist(first_legend)

# Add the second legend as usual
ax2.legend(handles2, labels2)

plt.show()

enter image description here

现在我要补充的是,如果您只使用一个图例添加所有行,那么会更清楚。这在this SO post中有描述,上面的代码可以通过

轻松实现
ax2.legend(handles1+handles2, labels1+labels2)

但显然你可能有自己想要两个传说的理由。