Заполните правый столбец легенды matplotlib

Эй, я пытаюсь подгонять легенду на сюжет, чтобы он не скрывал график.

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».

Любая помощь будет оценена, спасибо.

3 Solutions collect form web for “Заполните правый столбец легенды matplotlib”

Легенда заполняется колонками слева направо. Другими словами, если вы обманом поймете, что есть еще одна строка (без текста или цвета строки в легенде), вы можете заполнить пространство под «plot 3».

 import numpy as np import matplotlib.pyplot as plt from pylab import * 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') line1 = Line2D(range(10), range(10), marker='', color="red") line2 = Line2D(range(10), range(10), marker='',color="green") line3 = Line2D(range(10), range(10), marker='', color="blue") line4 = Line2D(range(10), range(10), marker='', color="white") plt.legend((line1,line4, line3,line2),('plot1','','plot3','plot2'),numpoints=1, loc=4,ncol=2) plt.show() 

Дифференциальная реализация ответа @cosmosis. Это, вероятно, более гибко.

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

Другой вариант – создать две легенды, как здесь, а затем вытеснить их с помощью ключевого слова bbox_to_anchor здесь

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

делаю это я получаю это без необходимости добавлять какие-либо другие объекты.

Третий подход, основанный на ответе Франнеско. Нарисуйте линию заполнителя с альфа = 0 (прозрачным).

 #draw your actual lines here #plt.... lines, labels = plt.gca().get_legend_handles_labels() lines.insert(1, plt.Line2D([],[], alpha=0)) labels.insert(1,'') plt.legend(lines,labels,ncol=2) plt.show() 

Это имеет те же преимущества, что и в его ответе. Однако это решение не работает в matplotlib 1.5.1 (под python3), говоря, что ValueError: Unrecognized marker style none

  • Matplotlib: нарисуйте выделенную область в форме прямоугольника с помощью мыши
  • Как визуализировать 95% -ный доверительный интервал в matplotlib?
  • Интерактивное построение с помощью Python через командную строку
  • Множество сеток на matplotlib
  • Гистограмма Уравнивание таблиц цветов matplotlib
  • Как отключить второстепенные тики логарифма в Matplotlib?
  • Коробка вокруг текста в matplotlib
  • Как выглядят все дистрибутивы, доступные в scipy.stats?
  •  
    Interesting Posts for Van-Lav

    Интерполяция и регуляризация временных рядов Python pandas

    Как удалить «сайты-пакеты» моей системы из пути поиска для пакетов Python?

    Создавайте сложенное изображение с различными размерами слоев с прозрачностью

    как показать атрибуты экземпляра в документе sphinx?

    В чем разница между всеми этими интерфейсами OpenCV Python?

    Как избежать Невозможно выделить ошибки памяти, вызванные использованием модуля подпроцесса

    Почему объект python threading.Thread имеет «начало», но не «останавливается»?

    Как фильтровать объект на основе диапазона DateTimeField в Python (Django) с помощью Tastypie

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

    Новые строки с Python ConfigParser?

    Python, который поддерживает разделение наследования?

    Python: multiprocessing.map: если один процесс вызывает исключение, почему не называются блоки finally, называемые другими процессами?

    Почему я не могу унаследовать от dict AND Exception в Python?

    wxPython: вызов события вручную

    Pyspark RDD ReduceByKey Множественная функция

    Python - лучший язык программирования в мире.