Вопрос по python – Легенда Matplotlib, добавляйте элементы через столбцы, а не вниз

27

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

<code>>>> 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')
</code>

enter image description here

Ваш Ответ

2   ответа
0

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

handles, labels = ax1.get_legend_handles_labels()
handles = np.concatenate((handles[::2],handles[1::2]),axis=0)
labels = np.concatenate((labels[::2],labels[1::2]),axis=0)
26

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

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

Похожие вопросы