Matplotlib:如何调整第二个图例的 zorder? [英] Matplotlib: how to adjust zorder of second legend?

查看:39
本文介绍了Matplotlib:如何调整第二个图例的 zorder?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个重现我的问题的示例:

Here is an example that reproduces my problem:

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)

我怎样才能使图例居中显示在线条上方?

How can I get the legend in the center to plot on top of the lines?

推荐答案

要获得准确的要求,请尝试以下操作.请注意,我已修改您的代码以在生成绘图时定义标签以及颜色,以免出现重复的蓝线.

To get exactly what you have asked for, try the following. Note I have modified your code to define the labels when you generate the plot and also the colors so you don't get a repeated blue line.

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

现在我要补充一点,如果您只使用一个图例将所有行添加到其中会更清楚.这在这篇SO帖子和上面的代码可以很容易地实现

Now I will add that it would be clearer if you just use a single legend adding all the lines to that. This is described in this SO post and in the code above can easily be achieved with

ax2.legend(handles1+handles2, labels1+labels2)

但是很明显,您可能有自己的理由想要两个传说.

But obviously you may have your own reasons for wanting two legends.

这篇关于Matplotlib:如何调整第二个图例的 zorder?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆