Подтвердить что ты не робот

Легенда 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

4b9b3361

Ответ 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