2012-04-11 20 views
24

以下の簡単なプロットの場合、matplotlibに凡例を移入させて、最初の列と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') 

enter image description here

答えて

20

は、私は1つの可能な方法を考えることができます。あなたは好きなようにorder your legend itemsすることができます。あなたがする必要があるのは、あなたが望む結果を与えるように注文を切り替えることだけです。

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

関連する問題