2009-05-16 20 views
5

私は視覚化したい異なるクラスのデータポイントを持っています。 http://imgur.com/1x97hMatplotlib:凡例が正しく表示されない

3000のデータポイントが10個あり、それぞれ300個あります。それらは1つの配列dに連結されており、繰り返します。ラベルはlabelsで与えられます。

pylab.clf() 
colors = (i + j for j in 'o<.' for i in 'bgrcmyk') 
for l, c in zip(labels, colors): 
    start, stop = i * 300, (i + 1) * 300 
    pylab.plot(d[0, start:stop], d[1, start:stop], c, label=l) 

pylab.legend(loc='lower left') 
pylab.show() 

誰もが私の伝説が台無しになってしまったのか?

+0

凡例には10個の項目しか含めるべきではないことを正しく理解していますか? –

+0

はい、あなたは正しいです。 – bayer

答えて

3

人がすぐにデータを実行できるように、組み込みのデータが含まれている可能性があります。ここにあなたが投稿した内容から修正された自己完結型の例がipython -pylabにMatplotlibの最近のsvnリビジョンと一緒に私のためにうまくいきます。私はいくつかの伝説関連のバグが最近修正されたと思う。

自動伝説の機能に関連したバグを想定すると

example figure http://www.iki.fi/jks/tmp/legend.png

、あなたはあなたが欲しいものを明白にすることにより、それを回避することができるかもしれない:

colors = (i + j for j in 'o<.' for i in 'bgrcmyk') 
labels = 'one two three four five six seven eight nine ten'.split() 
x = linspace(0, 2*pi, 3000) 
d = (2+random((2,3000))) * c_[sin(x), cos(x)].T 
for i, l, c in zip(range(10), labels, colors): 
    start, stop = i * 300, (i + 1) * 300 
    plot(d[0, start:stop], d[1, start:stop], c, label=l) 
legend(loc='lower left') 
show() 

そして、ここでは、私が何を得るのです凡例:

colors = (i + j for j in 'o<.' for i in 'bgrcmyk') 
labels = 'one two three four five six seven eight nine ten'.split() 
x = linspace(0, 2*pi, 3000) 
d = (2+random((2,3000))) * c_[sin(x), cos(x)].T 
lg = [] 
for i, l, c in zip(range(10), labels, colors): 
    start, stop = i * 300, (i + 1) * 300 
    handle = plot(d[0, start:stop], d[1, start:stop], c, label=l) 
    lg.append(handle) 
legend(lg, labels, loc='lower left') 
show() 
関連する問題