如何将图例放在p之外
我有一系列20个图(不是子图)可以在一个图中制作。 我希望传说能够超越盒子。 与此同时,我不想改变轴,因为图形的大小减少了。 请帮助我以下查询:
我想将情节框保留在情节区域之外。 (我希望传说位于情节区域的右侧)。
无论如何,我减少了图例框内文本的字体大小,以便图例框的大小很小。
16个解决方案
1360 votes
有很多方法可以做你想要的。 要添加@inalis和@Navi已经说过的内容,可以使用plt.figlegend()关键字参数将图例部分放置在轴外和/或减小字体大小。
在考虑减小字体大小(这可能使事情难以阅读)之前,尝试将图例放在不同的地方:
那么,让我们从一个通用的例子开始:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i * x, label='$y = %ix$' % i)
ax.legend()
plt.show()
如果我们做同样的事情,但使用plt.figlegend()关键字参数,我们可以稍微将图例移到轴边界之外:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i * x, label='$y = %ix$' % i)
ax.legend(bbox_to_anchor=(1.1, 1.05))
plt.show()
同样,你可以使图例更加水平和/或将它放在图的顶部(我也打开圆角和一个简单的阴影):
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
line, = ax.plot(x, i * x, label='$y = %ix$'%i)
ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.05),
ncol=3, fancybox=True, shadow=True)
plt.show()
或者,您可以缩小当前图的宽度,并将图例完全放在图的轴外:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i * x, label='$y = %ix$'%i)
# Shrink current axis by 20%
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
# Put a legend to the right of the current axis
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()
以类似的方式,您可以垂直缩小绘图,并将水平图例放在底部:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
line, = ax.plot(x, i * x, label='$y = %ix$'%i)
# Shrink current axis's height by 10% on the bottom
box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1,
box.width, box.height * 0.9])
# Put a legend below current axis
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05),
fancybox=True, shadow=True, ncol=5)
plt.show()
看看matplotlib图例指南。 您也可以看一下plt.figlegend().希望这有点帮助,无论如何!
Joe Kington answered 2019-01-16T21:34:12Z
403 votes
放置图例(loc)
使用loc的loc参数将图例定位在轴的边界框内。
例如。 lax将图例放置在边界框的右上角,默认情况下,在轴坐标(或边界框表示法h,l = ax.get_legend_handles_labels())中,范围从gridspec_kw={"width_ratios":[4,1]}到lax.axis("off")。
要将图例放置在轴边界框之外,可以指定图例左下角的轴坐标的元组loc。
plt.legend(loc=(1.04,0))
但是,更通用的方法是使用loc参数手动指定应放置图例的边界框。 人们可以限制自己只提供bbox的loc部分。 这将创建一个零跨度框,其中图例将按照lax参数指定的方向展开。 例如。
plt.legend(bbox_to_anchor=(1.04,1), loc="upper left")
将图例放置在轴外,使图例的左上角位于轴坐标中的位置loc。
下面给出了进一步的示例,其中另外示出了诸如loc和lax之类的不同参数之间的相互作用。