Python Matplotlib图例,跨列添加项,而不是向下添加项

Python Matplotlib图例,跨列添加项,而不是向下添加项,python,matplotlib,legend,Python,Matplotlib,Legend,对于下面的简单绘图,是否有方法使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(

对于下面的简单绘图,是否有方法使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')

我能想出一个可能的办法。你可以随心所欲。你所需要做的就是切换顺序,这样它就会给你想要的结果

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

默认情况下,在添加新行之前,图例将填充所有分配的列。因此,您可以将句柄和标签重新排序,以充分利用这一点:

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)