36

以下の単純なプロットの場合、最初の列から 2 番目の列ではなく、左から右に行を埋めるように、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')

ここに画像の説明を入力

4

2 に答える 2

37

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

ここに画像の説明を入力

于 2012-04-11T07:17:07.313 に答える