python - 先填一个matplotlib图例的右栏

标签 python matplotlib legend

嘿,我正在尝试将图例放入绘图中,这样它就不会遮挡图形。

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0,100,11)

plt.plot(X,-X, label='plot 1')
plt.plot(X,-2*X, label='plot 2')
plt.plot(X,-3*X, label='plot 3')

leg=plt.legend(ncol=2)
leg.get_frame().set_visible(False)

plt.show()

所以在上面的最小工作示例中,我希望能够做的是将图例中的“plot 2”标签移动到右栏中,即直接在“plot 3”下方。

如有任何帮助,我们将不胜感激。

最佳答案

@cosmos 答案的不同实现。它可能更灵活。

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0,100,11)

plt.plot(X,-X, label='plot 1', color='red')
plt.plot(X,-2*X, label='plot 2', color='green')
plt.plot(X,-3*X, label='plot 3', color='blue')

(lines, labels) = plt.gca().get_legend_handles_labels()
#it's safer to use linestyle='none' and marker='none' that setting the color to white
#should be invisible whatever is the background
lines.insert(1, plt.Line2D(X,X, linestyle='none', marker='none'))
labels.insert(1,'')

plt.legend(lines,labels,numpoints=1, loc=4,ncol=1)

plt.show()

另一种选择是创建两个图例 here然后使用 bbox_to_anchor 关键字 here 替换它们

(lines, labels) = plt.gca().get_legend_handles_labels()
leg1 = plt.legend(lines[:1], labels[:1], bbox_to_anchor=(0,0,0.8,1), loc=1)
leg2 = plt.legend(lines[1:], labels[1:], bbox_to_anchor=(0,0,1,1), loc=1)
gca().add_artist(leg1)

这样做我得到 this无需在其他对象上添加任何内容。

关于python - 先填一个matplotlib图例的右栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737681/

相关文章:

python - matplotlib 中是否有最大 figsize?

r - 图像与 ggplot : how to plot color legend?

javascript - 如何制作具有多个系列启用器/禁用器的人力车传奇?

python - 如何使用 pandas groupby 函数在 numpy 数组上应用函数

python - 如何通过Python合并不同文件夹中同名文件的内容?

python - 是否可以控制从 matplotlib 颜色图中检索哪些颜色?

r - R 中的绘图函数在不调用 legend() 的情况下生成图例

python 创建每日文件夹

python - import -force mymodule 用于 python 3.6+?

Python3导入错误: No module named '_tkinter' on Ubuntu