Легенда Matplotlib, добавлять элементы по столбцам, а не вниз

Для простого сюжета ниже существует ли способ заставить matplotlib заполнить легенду так, чтобы она заполняла строки слева направо, вместо первого столбца, а затем второго столбца?

>>> from pylab import *
>>> x = arange(-2*pi, 2*pi, 0.1)
>>> plot(x, sin(x), label='Sine')
>>> plot(x, cos(x), label='Cosine')
>>> plot(x, arctan(x), label='Inverse tan')
>>> legend(loc=9,ncol=2)
>>> grid('on')

enter image description here

Ответы

Ответ 1

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

import matplotlib.pyplot as plt
import numpy as np
import itertools

def flip(items, ncol):
    return itertools.chain(*[items[i::ncol] for i in range(ncol)])

x = np.arange(-2*np.pi, 2*np.pi, 0.1)
ax = plt.subplot(111)
ax.plot(x, np.sin(x), label='Sine')
ax.plot(x, np.cos(x), label='Cosine')
ax.plot(x, np.arctan(x), label='Inverse tan')

handles, labels = ax.get_legend_handles_labels()
plt.legend(flip(handles, 2), flip(labels, 2), loc=9, ncol=2)

plt.grid('on')
plt.show()

enter image description here