I have a series of 20 plots (not subplots) to be made in a single figure. I want the legend to be outside of the box. At the same time, I do not want to change the axes, as the size of the figure gets reduced. Kindly help me for the following queries:

- I want to keep the legend box outside the plot area. (I want the legend to be outside at the right side of the plot area).
- Is there anyway that I reduce the font size of the text inside the legend box, so that the size of the legend box will be small.

##
1

There are a number of ways to do what you want. To add to what @inalis and @Navi already said, you can use the `bbox_to_anchor`

keyword argument to place the legend partially outside the axes and/or decrease the font size.

Before you consider decreasing the font size (which can make things awfully hard to read), try playing around with placing the legend in different places:

So, let’s start with a generic example:

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

If we do the same thing, but use the `bbox_to_anchor`

keyword argument we can shift the legend slightly outside the axes boundaries:

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

Similarly, make the legend more horizontal and/or put it at the top of the figure (I’m also turning on rounded corners and a simple drop shadow):

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

Alternatively, shrink the current plot’s width, and put the legend entirely outside the axis of the figure (note: if you use `tight_layout()`

, then leave out `ax.set_position()`

:

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

And in a similar manner, shrink the plot vertically, and put a horizontal legend at the bottom:

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

Have a look at the matplotlib legend guide. You might also take a look at `plt.figlegend()`

.