Нажмите, чтобы увидеть сюжет

я есть серия из 20 сюжетов (не субплотов), которые должны быть выполнены в одной фигуре. Я хочу, чтобы легенда была за пределами коробки. В то же время я не хочу менять оси, так как размер фигуры уменьшается. Пожалуйста, помогите мне по следующим вопросам:

Я хочу, чтобы поле для легенды находилось за пределами области сюжета. (Я хочу, чтобы легенда находилась снаружи с правой стороны области сюжета).Есть ли в любом случае, что я уменьшаю размер шрифта текста внутри поля легенды, чтобы размер окна легенды был маленьким.
 dotancohen15 февр. 2016 г., 11:38
Для более новых версий matplotlib,этот ответ показывает, как установить для matplotlib значениеавтоматически определять, где разместить легенду, не мешая сюжетам.
 Trevor Boyd Smith17 апр. 2018 г., 19:59
Этот ответ имеет большую глубинуhttps://stackoverflow.com/a/43439132/52074, и делает это с двумя строками кода! ответ с ответом +1200 тоже хорош, но я нашел его менее общим.
 robodasha02 авг. 2017 г., 01:24
Возник тот же вопрос и нашел этот замечательный пример, который работал для меня "из коробки":matplotlib.org/1.3.1/users/legend_guide.html
 Ali14 июн. 2018 г., 14:35
@dotancohen«автоматически определять, куда поместить легенду, не мешая сюжетам» В некоторых случаях, когда на графике много кривых, это, к сожалению, невозможно. В этих случаях пользователь может захотеть вручную разместить легенду и поместить ее вне области графика. У меня сейчас трудности с таким сюжетом.

Ответы на вопрос(16)

Решение Вопроса

Создать свойства шрифта

from matplotlib.font_manager import FontProperties

fontP = FontProperties()
fontP.set_size('small')
legend([plot1], "title", prop=fontP)
 Christian Alis15 янв. 2011 г., 18:01
использовать из matplotlib.font_manager import FontProperties НЕ импортировать matplotlib.font_manager как FontProperties. То, что вы делаете, это наложение псевдонима («переименование») matplotlib.font_manager на FontProperties, поэтому вызов fontP = FontProperties () фактически вызывает вызов matplotlib.font_manager, который не вызывается.
 Paul H13 янв. 2018 г., 09:21
что такоеplot1 в этом ответе?
 Mateen Ulhaq25 окт. 2018 г., 19:52
Это отвечает на вторичную часть вопроса, но не первичную (ту, которая называется).
 Mateen Ulhaq25 окт. 2018 г., 19:55
Кроме того, правильный способ сделать этоplt.legend(fontsize='small')
 Richard24 июл. 2018 г., 16:47
что такоеlegend в этом ответе?

взятого у Джо, этот метод изменяет ширину окна, чтобы автоматически соответствовать легенде справа от рисунка.

import matplotlib.pyplot as plt
import numpy as np

plt.ion()

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)

# Put a legend to the right of the current axis
leg = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

plt.draw()

# Get the ax dimensions.
box = ax.get_position()
xlocs = (box.x0,box.x1)
ylocs = (box.y0,box.y1)

# Get the figure size in inches and the dpi.
w, h = fig.get_size_inches()
dpi = fig.get_dpi()

# Get the legend size, calculate new window width and change the figure size.
legWidth = leg.get_window_extent().width
winWidthNew = w*dpi+legWidth
fig.set_size_inches(winWidthNew/dpi,h)

# Adjust the window size to fit the figure.
mgr = plt.get_current_fig_manager()
mgr.window.wm_geometry("%ix%i"%(winWidthNew,mgr.window.winfo_height()))

# Rescale the ax to keep its original size.
factor = w*dpi/winWidthNew
x0 = xlocs[0]*factor
x1 = xlocs[1]*factor
width = box.width*factor
ax.set_position([x0,ylocs[0],x1-x0,ylocs[1]-ylocs[0]])

plt.draw()
 Filip S.30 апр. 2014 г., 08:47
Если вы используете бэкэнд Qt4Agg (который по умолчанию используется в моей установке Linux для matplotlib), замените строкуmgr.window.wm_geometry(...) с участиемmgr.window.setFixedWidth(winWidthNew).
 Ezekiel Kruglick18 февр. 2014 г., 22:21
Я нашел это весьма полезным, и это сработало для меня. Обратите внимание, что если вы находитесь в бэкэнде wx (например, используете windows), замените mgr.window.wm_geometry ("% ix% i"% (winWidthNew, mgr.window.winfo_height ())) на mgr.window.SetClientSizeWH (winWidthNew) , winHeightNew) или тому подобное
 Filip S.30 апр. 2014 г., 08:55
И, как я только что обнаружил, если вы используете бэкэнд, который не показывает никаких окон, предназначенный для сохранения прямо в файл (например, бэкэнды SVG и AGG), просто пропустите изменение размера окна вообще.fig.set_size_inches(...) заботится о том, чтобы изменить размер вам нужно.

что вы просили, но я нашел альтернативу для той же проблемы. Сделайте легенду полупрозрачной, вот так:

Сделайте это с:

fig = pylab.figure()
ax = fig.add_subplot(111)
ax.plot(x,y,label=label,color=color)
# Make the legend transparent:
ax.legend(loc=2,fontsize=10,fancybox=True).get_frame().set_alpha(0.5)
# Make a transparent text box
ax.text(0.02,0.02,yourstring, verticalalignment='bottom',
                     horizontalalignment='left',
                     fontsize=10,
                     bbox={'facecolor':'white', 'alpha':0.6, 'pad':10},
                     transform=self.ax.transAxes)

разобрались ли вы уже с вашей проблемой ... возможно, да, но ... я просто использовал строку 'outside' для местоположения, как в matlab. Я импортировал pylab из matplotlib. увидеть код следующим образом:

from matplotlib as plt
from matplotlib.font_manager import FontProperties
...
...
t = A[:,0]
sensors = A[:,index_lst]

for i in range(sensors.shape[1]):
    plt.plot(t,sensors[:,i])

plt.xlabel('s')
plt.ylabel('°C')
lgd = plt.legend(b,loc='center left', bbox_to_anchor=(1, 0.5),fancybox = True, shadow = True)

Нажмите, чтобы увидеть сюжет

Краткий ответВызвать перетаскиваемую легенду и в интерактивном режиме переместить ее туда, куда вы хотите:

Длинный ответ: Если вы предпочитаете размещать легенду интерактивно / вручную, а не программно, вы можете переключить режим легенды с перетаскиванием, чтобы перетащить ее туда, куда вы хотите. Проверьте пример ниже:

import matplotlib.pylab as plt
import numpy as np
#define the figure and get an axes instance
fig = plt.figure()
ax = fig.add_subplot(111)
#plot the data
x = np.arange(-5, 6)
ax.plot(x, x*x, label='y = x^2')
ax.plot(x, x*x*x, label='y = x^3')

plt.show()
 Hitesh19 авг. 2018 г., 15:03
вау, спасибо, очень полезно

что вы хотите. Чтобы добавить к тому, что @inalis и @Navi уже сказали, вы можете использоватьbbox_to_anchor Аргумент ключевого слова для частичного размещения легенды вне осей и / или уменьшения размера шрифта.

Прежде чем подумать об уменьшении размера шрифта (что может сильно усложнить чтение), попробуйте поиграть с размещением легенды в разных местах:

Итак, давайте начнем с общего примера:

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

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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

Точно так же вы можете сделать легенду более горизонтальной и / или поместить ее вверху рисунка (я также включаю закругленные углы и простую тень):

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

Кроме того, вы можете уменьшить ширину текущего графика и поместить легенду полностью вне оси фигуры:

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

Аналогичным образом вы можете уменьшить сюжет по вертикали и поместить горизонтальную легенду внизу:

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

Посмотрите наРуководство по легендам Matplotlib, Вы также можете взглянуть наplt.figlegend(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

%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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

% 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(), Надеюсь, это поможет немного, в любом случае!

% i) ax.legend() plt.show()

Если мы делаем то же самое, но используемbbox_to_anchor Ключевым аргументом мы можем немного сместить легенду за границы осей:

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(), Надеюсь, это поможет немного, в любом случае!

 Matthew G.20 февр. 2013 г., 00:50
Если у кого-то возникли проблемы с этим, обратите внимание, что непростое_положение () вызовет проблемы!
 meduz23 окт. 2013 г., 11:01
отличный ответ! правильная ссылка на документmatplotlib.org/users/legend_guide.html#legend-location
 coldfix05 окт. 2017 г., 19:30
Обратите внимание, что если вы хотите сохранить рисунок в файл, вам, вероятно, следует сохранить возвращенный объект, т.е.legend = ax.legend() и позжеfig.savefig(bbox_extra_artists=(legend,))
 jlconlin11 июн. 2012 г., 23:20
Это должно быть сделано в качестве примера или добавлено в галерею на сайте matplotlib.
 meduz23 окт. 2013 г., 11:03
в качестве полноты, вы могли бы сказать, что в целом (резюмировано из документа) "bbox_to_anchor это кортеж из 4 поплавков (x, y, ширина, высота bbox) или кортеж из 2 поплавков (x, y) в нормализованных координатах осей. "

bbox_to_anchor + bbox_extra_artists + bbox_inches='tight'.

Более длинный ответ: вы можете использоватьbbox_to_anchor чтобы вручную указать расположение поля легенды, как некоторые другие люди указали в ответах.

Тем не менее, обычная проблема заключается в том, что поле легенды обрезается, например:

import matplotlib.pyplot as plt

# data 
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]

# Plot
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)

# Add legend, title and axis labels
lgd = ax.legend( [ 'Lag ' + str(lag) for lag in all_x], loc='center right', bbox_to_anchor=(1.3, 0.5))
ax.set_title('Title')
ax.set_xlabel('x label')
ax.set_ylabel('y label')

fig.savefig('image_output.png', dpi=300, format='png')

Чтобы предотвратить обрезку поля легенды, при сохранении рисунка вы можете использовать параметрыbbox_extra_artists а такжеbbox_inches спроситьsavefig включить обрезанные элементы в сохраненное изображение:

fig.savefig('image_output.png', bbox_extra_artists=(lgd,), bbox_inches='tight')

Пример (я только изменил последнюю строку, чтобы добавить 2 параметра вfig.savefig()):

import matplotlib.pyplot as plt

# data 
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]

# Plot
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)

# Add legend, title and axis labels
lgd = ax.legend( [ 'Lag ' + str(lag) for lag in all_x], loc='center right', bbox_to_anchor=(1.3, 0.5))
ax.set_title('Title')
ax.set_xlabel('x label')
ax.set_ylabel('y label')    

fig.savefig('image_output.png', dpi=300, format='png', bbox_extra_artists=(lgd,), bbox_inches='tight')

Хотелось бы, чтобы matplotlib изначально разрешал внешнее расположение для поля легенды какМатлаб делает:

figure
x = 0:.2:12;
plot(x,besselj(1,x),x,besselj(2,x),x,besselj(3,x));
hleg = legend('First','Second','Third',...
              'Location','NorthEastOutside')
% Make the text of the legend italic and color it brown
set(hleg,'FontAngle','italic','TextColor',[.3,.2,.1])

 Franck Dernoncourt09 нояб. 2016 г., 06:09
@avtomaton Понятно, последние версии делают жизнь заговора проще.
 avtomaton09 нояб. 2016 г., 05:49
@FranckDernoncourt python3, matplotlib версия 1.5.3
 Demitrian31 авг. 2014 г., 16:04
Спасибо вам большое! Параметры "bbox_to_anchor", "bbox_extra_artist" и "" bbox_inches = 'sharp "были именно тем, что мне было нужно, чтобы заставить его работать правильно.
 Franck Dernoncourt08 нояб. 2016 г., 18:28
@avtomaton Спасибо, приятно знать, какую версию matplotlib вы используете?
 avtomaton08 нояб. 2016 г., 06:16
Спасибо, но на самом делеbbox_inches='tight' у меня отлично работает даже без bbox_extra_artist

которое работало для меня, когда у меня была огромная легенда, состояло в том, чтобы использовать дополнительный пустой макет изображения. В следующем примере я сделал 4 строки, а в нижней части я нанесю изображение со смещением для легенды (bbox_to_anchor) вверху, оно не обрезается.

f = plt.figure()
ax = f.add_subplot(414)
lgd = ax.legend(loc='upper left', bbox_to_anchor=(0, 4), mode="expand", borderaxespad=0.3)
ax.autoscale_view()
plt.savefig(fig_name, format='svg', dpi=1200, bbox_extra_artists=(lgd,), bbox_inches='tight')

вы также можете разместить легенду на сюжете или слегка отодвинуть ее к краю. Вот пример использованияPlotly Python API, сделанный сIPython Notebook, Я в команде.

Для начала вам нужно установить необходимые пакеты:

import plotly
import math
import random
import numpy as np

Затем установите Plotly:

un='IPython.Demo'
k='1fw3zw2o13'
py = plotly.plotly(username=un, key=k)


def sin(x,n):
sine = 0
for i in range(n):
    sign = (-1)**i
    sine = sine + ((x**(2.0*i+1))/math.factorial(2*i+1))*sign
return sine

x = np.arange(-12,12,0.1)

anno = {
'text': '$\\sum_{k=0}^{\\infty} \\frac {(-1)^k x^{1+2k}}{(1 + 2k)!}

Это создает ваш график и дает вам возможность сохранить легенду внутри самого графика. По умолчанию для легенды, если она не установлена, это поместить ее в график, как показано здесь.

Для альтернативного размещения вы можете точно выровнять край графика и границу легенды и удалить граничные линии для более точного соответствия.

Вы можете перемещать и изменять стиль легенды и графика с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие опции, чтобы расположить легенду внутри графика, присваивая значения x и y <= 1. E.g:

{"x" : 0,"y" : 0} -- Нижняя левая{"x" : 1, "y" : 0} -- Нижний правый{"x" : 1, "y" : 1} -- В правом верхнем углу{"x" : 0, "y" : 1} -- Верхний левый{"x" :.5, "y" : 0} - Нижний Центр{"x": .5, "y" : 1} - Топ Центр

В этом случае мы выбираем верхний правый угол,legendstyle = {"x" : 1, "y" : 1}также описано вдокументация:

, 'x': 0.3, 'y': 0.6,'xref': "paper", 'yref': "paper",'showarrow': False, 'font':{'size':24} } l = { 'annotations': [anno], 'title': 'Taylor series of sine', 'xaxis':{'ticks':'','linecolor':'white','showgrid':False,'zeroline':False}, 'yaxis':{'ticks':'','linecolor':'white','showgrid':False,'zeroline':False}, 'legend':{'font':{'size':16},'bordercolor':'white','bgcolor':'#fcfcfc'} } py.iplot([{'x':x, 'y':sin(x,1), 'line':{'color':'#e377c2'}, 'name':'$x\\\\

Это создает ваш график и дает вам возможность сохранить легенду внутри самого графика. По умолчанию для легенды, если она не установлена, это поместить ее в график, как показано здесь.

Для альтернативного размещения вы можете точно выровнять край графика и границу легенды и удалить граничные линии для более точного соответствия.

Вы можете перемещать и изменять стиль легенды и графика с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие опции, чтобы расположить легенду внутри графика, присваивая значения x и y <= 1. E.g:

{"x" : 0,"y" : 0} -- Нижняя левая{"x" : 1, "y" : 0} -- Нижний правый{"x" : 1, "y" : 1} -- В правом верхнем углу{"x" : 0, "y" : 1} -- Верхний левый{"x" :.5, "y" : 0} - Нижний Центр{"x": .5, "y" : 1} - Топ Центр

В этом случае мы выбираем верхний правый угол,legendstyle = {"x" : 1, "y" : 1}также описано вдокументация:

},\ {'x':x, 'y':sin(x,2), 'line':{'color':'#7f7f7f'},'name':'$ x-\\frac{x^3}{6}

Это создает ваш график и дает вам возможность сохранить легенду внутри самого графика. По умолчанию для легенды, если она не установлена, это поместить ее в график, как показано здесь.

Для альтернативного размещения вы можете точно выровнять край графика и границу легенды и удалить граничные линии для более точного соответствия.

Вы можете перемещать и изменять стиль легенды и графика с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие опции, чтобы расположить легенду внутри графика, присваивая значения x и y <= 1. E.g:

{"x" : 0,"y" : 0} -- Нижняя левая{"x" : 1, "y" : 0} -- Нижний правый{"x" : 1, "y" : 1} -- В правом верхнем углу{"x" : 0, "y" : 1} -- Верхний левый{"x" :.5, "y" : 0} - Нижний Центр{"x": .5, "y" : 1} - Топ Центр

В этом случае мы выбираем верхний правый угол,legendstyle = {"x" : 1, "y" : 1}также описано вдокументация:

},\ {'x':x, 'y':sin(x,3), 'line':{'color':'#bcbd22'},'name':'$ x-\\frac{x^3}{6}+\\frac{x^5}{120}

Это создает ваш график и дает вам возможность сохранить легенду внутри самого графика. По умолчанию для легенды, если она не установлена, это поместить ее в график, как показано здесь.

Для альтернативного размещения вы можете точно выровнять край графика и границу легенды и удалить граничные линии для более точного соответствия.

Вы можете перемещать и изменять стиль легенды и графика с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие опции, чтобы расположить легенду внутри графика, присваивая значения x и y <= 1. E.g:

{"x" : 0,"y" : 0} -- Нижняя левая{"x" : 1, "y" : 0} -- Нижний правый{"x" : 1, "y" : 1} -- В правом верхнем углу{"x" : 0, "y" : 1} -- Верхний левый{"x" :.5, "y" : 0} - Нижний Центр{"x": .5, "y" : 1} - Топ Центр

В этом случае мы выбираем верхний правый угол,legendstyle = {"x" : 1, "y" : 1}также описано вдокументация:

},\ {'x':x, 'y':sin(x,4), 'line':{'color':'#17becf'},'name':'$ x-\\frac{x^5}{120}

Это создает ваш график и дает вам возможность сохранить легенду внутри самого графика. По умолчанию для легенды, если она не установлена, это поместить ее в график, как показано здесь.

Для альтернативного размещения вы можете точно выровнять край графика и границу легенды и удалить граничные линии для более точного соответствия.

Вы можете перемещать и изменять стиль легенды и графика с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие опции, чтобы расположить легенду внутри графика, присваивая значения x и y <= 1. E.g:

{"x" : 0,"y" : 0} -- Нижняя левая{"x" : 1, "y" : 0} -- Нижний правый{"x" : 1, "y" : 1} -- В правом верхнем углу{"x" : 0, "y" : 1} -- Верхний левый{"x" :.5, "y" : 0} - Нижний Центр{"x": .5, "y" : 1} - Топ Центр

В этом случае мы выбираем верхний правый угол,legendstyle = {"x" : 1, "y" : 1}также описано вдокументация:

}], layout=l)

Это создает ваш график и дает вам возможность сохранить легенду внутри самого графика. По умолчанию для легенды, если она не установлена, это поместить ее в график, как показано здесь.

Для альтернативного размещения вы можете точно выровнять край графика и границу легенды и удалить граничные линии для более точного соответствия.

Вы можете перемещать и изменять стиль легенды и графика с помощью кода или с помощью графического интерфейса. Чтобы переместить легенду, у вас есть следующие опции, чтобы расположить легенду внутри графика, присваивая значения x и y <= 1. E.g:

{"x" : 0,"y" : 0} -- Нижняя левая{"x" : 1, "y" : 0} -- Нижний правый{"x" : 1, "y" : 1} -- В правом верхнем углу{"x" : 0, "y" : 1} -- Верхний левый{"x" :.5, "y" : 0} - Нижний Центр{"x": .5, "y" : 1} - Топ Центр

В этом случае мы выбираем верхний правый угол,legendstyle = {"x" : 1, "y" : 1}также описано вдокументация:

Размещение легенды (bbox_to_anchor)

loc аргументplt.legend.
Например.loc="upper right" размещает легенду в верхнем правом углу ограничительной рамки, которая по умолчанию распространяется на(0,0) в(1,1) в координатах осей (или в обозначении ограничительной рамки(x0,y0, width, height)=(0,0,1,1)).

Чтобы разместить легенду за пределами ограничительной рамки осей, можно указать кортеж(x0,y0) координат осей нижнего левого угла легенды.

plt.legend(loc=(1.04,0))

Однако более универсальным подходом было бы вручную указать ограничивающую рамку, в которую следует поместить легенду, используяbbox_to_anchor аргумент. Можно ограничить себя только(x0,y0) часть bbox. Это создает поле нулевого диапазона, из которого легенда будет расширяться в направлении, заданномloc аргумент. Например.

plt.legend(bbox_to_anchor=(1.04,1), loc="upper left")

размещает легенду вне осей, так что верхний левый угол легенды находится в положении(1.04,1) в координатах осей.

Ниже приведены дополнительные примеры, где дополнительно взаимодействие между различными аргументами, такими какmode а такжеncols показаны.

l1 = plt.legend(bbox_to_anchor=(1.04,1), borderaxespad=0)
l2 = plt.legend(bbox_to_anchor=(1.04,0), loc="lower left", borderaxespad=0)
l3 = plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
l4 = plt.legend(bbox_to_anchor=(0,1.02,1,0.2), loc="lower left",
                mode="expand", borderaxespad=0, ncol=3)
l5 = plt.legend(bbox_to_anchor=(1,0), loc="lower right", 
                bbox_transform=fig.transFigure, ncol=3)
l6 = plt.legend(bbox_to_anchor=(0.4,0.8), loc="upper right")

Подробно о том, как интерпретировать аргумент из 4-х кортежейbbox_to_anchor, как вl4можно найти вэтот вопрос,mode="expand" расширяет легенду по горизонтали внутри ограничительной рамки, заданной 4-мя кортежами. Для вертикально развернутой легенды см.этот вопрос.

Иногда может быть полезно указать ограничивающий прямоугольник в координатах фигуры вместо координат осей. Это показано в примереl5 сверху, гдеbbox_transform Аргумент используется для размещения легенды в левом нижнем углу рисунка.

Постобработка

Размещение легенды вне осей часто приводит к нежелательной ситуации, когда она полностью или частично выходит за пределы рисунка.

Решения этой проблемы:

Настройте параметры подзаговора
Можно настроить параметры подзаговора таким образом, чтобы оси занимали меньше места внутри фигуры (и тем самым оставляли больше места для легенды), используяplt.subplots_adjust, Например.

plt.subplots_adjust(right=0.7)

оставляет 30% свободного пространства на правой стороне фигуры, где можно разместить легенду.

Плотный макет
С помощьюplt.tight_layout Позволяет автоматически настраивать параметры подзаговора так, чтобы элементы фигуры плотно прилегали к краям фигуры. К сожалению, легенда не принимается во внимание в этом автомате, но мы можем предоставить прямоугольник, в который будет помещаться вся область сюжетов (включая метки).

plt.tight_layout(rect=[0,0,0.75,1])

Сохранение фигуры сbbox_inches = "tight"
Аргументbbox_inches = "tight" вplt.savefig можно использовать для сохранения рисунка, чтобы все художники на холсте (включая легенду) помещались в сохраненную область. При необходимости размер фигуры настраивается автоматически.

plt.savefig("output.png", bbox_inches="tight")
автоматическая настройка параметров подзаговора
Способ автоматической настройки положения подзаговора таким образом, чтобы легенда помещалась внутри холстабез изменения размера фигуры можно найти в этом ответе:Создание фигуры с точным размером и без заполнения (и легенда вне осей)

Сравнение рассмотренных выше случаев:

альтернативы

Фигура легенда
Можно использовать легенду к фигуре вместо осей,matplotlib.figure.Figure.legend, Это стало особенно полезным для версии matplotlib> = 2.1, где не требуется никаких специальных аргументов

fig.legend(loc=7) 

создать легенду для всех художников по разным осям фигуры. Легенда размещается с использованиемloc Аргумент, аналогичный тому, как он расположен внутри осей, но в отношении всей фигуры - следовательно, он будет несколько вне осей автоматически. Осталось отрегулировать вспомогательные сюжеты так, чтобы не было перекрытия между легендой и осями. Здесь точка«Настройте параметры подзаговора» сверху будет полезно. Пример:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,2*np.pi)
colors=["#7aa0c4","#ca82e1" ,"#8bcd50","#e18882"]
fig, axes = plt.subplots(ncols=2)
for i in range(4):
    axes[i//2].plot(x,np.sin(x+i), color=colors[i],label="y=sin(x+{})".format(i))

fig.legend(loc=7)
fig.tight_layout()
fig.subplots_adjust(right=0.75)   
plt.show()

Легенда внутри осей отдельных сюжетов
Альтернатива использованиюbbox_to_anchor было бы разместить легенду в ее осях отдельных сюжетов (lax). Поскольку легенда должна быть меньше сюжета, мы можем использоватьgridspec_kw={"width_ratios":[4,1]} при создании осей. Мы можем спрятать топорыlax.axis("off") но все же вставьте легенду. Ручки и метки легенды нужно получить из реального сюжета черезh,l = ax.get_legend_handles_labels(), а затем могут быть поставлены в легенду вlax сюжетные,lax.legend(h,l), Полный пример ниже.

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = 6,2

fig, (ax,lax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios":[4,1]})
ax.plot(x,y, label="y=sin(x)")
....

h,l = ax.get_legend_handles_labels()
lax.legend(h,l, borderaxespad=0)
lax.axis("off")

plt.tight_layout()
plt.show()

Это создает сюжет, который визуально очень похож на сюжет сверху:

Мы также можем использовать первые оси для размещения легенды, но использоватьbbox_transform из осей легенды,

ax.legend(bbox_to_anchor=(0,0,1,1), bbox_transform=lax.transAxes)
lax.axis("off")

При таком подходе нам не нужно получать маркеры легенды извне, но нам нужно указатьbbox_to_anchor аргумент.

Дальнейшее чтение и заметки:Рассмотрим матплотлибруководство легенды с некоторыми примерами других вещей, которые вы хотите сделать с легендами.Пример кода для размещения легенд для круговых диаграмм можно найти непосредственно в ответе на этот вопрос:Python - легенда перекрывается с круговой диаграммойloc Аргумент может принимать числа вместо строк, что делает вызовы короче, однако они не очень интуитивно отображаются друг на друга. Вот отображение для справки:

 orbeckst16 июл. 2018 г., 10:15
Может быть, вы могли бы внести его в документы Matplotlib?
 DrAl21 нояб. 2018 г., 13:19
Фантастический ответ -i.stack.imgur.com/OIMyM.png - это изображение должно быть включено в документы matplotlib.

используйтеloc а такжеbbox_to_anchor ключевые словаlegend(), Например, следующий код поместит легенду справа от области графика:

legend(loc="upper left", bbox_to_anchor=(1,1))

Для получения дополнительной информации см.руководство легенды

 astromax05 июл. 2015 г., 17:28
Хорошо - мне нравится реализация, но когда я иду, чтобы сохранить рисунок (без изменения размера вручную в окне, что я не хочу делать каждый раз), легенда отрубается. Есть идеи о том, как я могу это исправить?
 Christian Alis05 июл. 2015 г., 21:07
@astromax Я не уверен, но, возможно, попробуйте позвонитьplt.tight_layout()?

Просто позвониlegend() позвонить послеplot() позвоните так:

# matplotlib
plt.plot(...)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))

# Pandas
df.myCol.plot().legend(loc='center left', bbox_to_anchor=(1, 0.5))

Результаты будут выглядеть примерно так:

 kidmose25 окт. 2016 г., 11:54
работает и при передаче тех же параметров в matplotlib.pyplot.legend
 user171782825 янв. 2019 г., 04:01
Отрезает ли это слова в легенде для кого-то еще?

Вот пример из найденного учебника matplotlibВот, Это один из более простых примеров, но я добавил прозрачность в легенду и добавил plt.show (), чтобы вы могли вставить это в интерактивную оболочку и получить результат:

import matplotlib.pyplot as plt
p1, = plt.plot([1, 2, 3])
p2, = plt.plot([3, 2, 1])
p3, = plt.plot([2, 3, 1])
plt.legend([p2, p1, p3], ["line 1", "line 2", "line 3"]).get_frame().set_alpha(0.5)
plt.show()
 Mad Physicist04 апр. 2016 г., 19:07
Голосование за хитрую распаковку линейных объектов.

figlegend, Можно создать легенду независимо от любого объекта Оси. Однако вам может понадобиться создать несколько «фиктивных» путей, чтобы убедиться, что форматирование объектов передается корректно.

более новые версииmatplotlib а такжеpylab Можноавтоматически определять, где разместить легенду, не мешая сюжетам, если возможно.

pylab.legend(loc='best')

Это автоматически поместит легенду от данных, если это возможно!

Однако, если нет места для размещения легенды без наложения данных, вам следует попробовать один из других ответов; с помощьюloc="best" никогда не поставит легендуснаружи сюжета.

 Tommy09 сент. 2015 г., 14:01
эта опция полезна, но не отвечает на вопрос, поэтому я проголосовал. насколько я могу судить, лучше всего никогда не помещать легенду за пределы сюжета
 Edgar H23 авг. 2015 г., 12:37
Спасибо за указание на это! Я искал это несколько лет назад и не нашел этого, и это действительно облегчает мне жизнь.
 dotancohen09 сент. 2015 г., 15:19
@Tommy: В комментариях OP (которые, кажется, уже нет) было ясно разъяснено, что OP хотел, чтобы легенда не покрывала данные графика, и он думал, что единственный способ сделать это за пределами графика. Вы можете увидеть это в ответах Мефатии, Матео Санчеса, Бастиана и Радтека. ОПпопросил X, но он хотел Y.
 durbachit30 авг. 2016 г., 05:09
Вообще-то нет. Он / она специально попросил, чтобы легенда была за пределами сюжета. Это в названии вопроса;) «Как убрать легенду из сюжета».
 adam.r08 февр. 2018 г., 17:34
Это не гарантирует, что легенда не затеняет данные. Просто сделайте очень плотный сюжет - негде поставить легенду. Например, попробуйте это ... из numpy import arange, sin, pi import matplotlib.pyplot как plt t = arange (0.0, 100.0, 0.01) fig = plt.figure (1) ax1 = fig.add_subplot (211) ax1. scatter (t, sin (2 * pi * t), label = 'test') ax1.grid (True) # ax1.set_ylim ((- 2, 2)) ax1.set_ylabel ('1 Гц') ax1.set_title ( 'Синусоида или два') для метки в ax1.get_xticklabels (): label.set_color ('r') plt.legend (loc = 'best') plt.show ()

bbox_extra_artists а такжеbbox_inches, где вам не нужно, чтобы ваши дополнительные художники в рамках вашейsavefig вызов. Я придумал это, так как я генерирую большую часть своего графика внутри функций.

Вместо того, чтобы добавлять все свои дополнения в ограничивающий прямоугольник, когда вы хотите их записать, вы можете заранее добавить их вFigureхудожники. Используя что-то похожее на Franck Dernoncourt'sответ выше:

import matplotlib.pyplot as plt

# data 
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]

# plotting function
def gen_plot(x, y):
    fig = plt.figure(1)
    ax = fig.add_subplot(111)
    ax.plot(all_x, all_y)
    lgd = ax.legend( [ "Lag " + str(lag) for lag in all_x], loc="center right", bbox_to_anchor=(1.3, 0.5))
    fig.artists.append(lgd) # Here's the change
    ax.set_title("Title")
    ax.set_xlabel("x label")
    ax.set_ylabel("y label")
    return fig

# plotting
fig = gen_plot(all_x, all_y)

# No need for `bbox_extra_artists`
fig.savefig("image_output.png", dpi=300, format="png", bbox_inches="tight")

Вот сгенерированный сюжет.

Ваш ответ на вопрос