web-dev-qa-db-ja.com

Pythonプロット凡例:マーカーが2回表示される

Matplotlibで作成された凡例を使用した簡単なプロットでは、次のようになります。誰もがなぜそしてどのように問題を回避するのか知っていますか?私のコマンドは:

pl.plot(x1,x2,'g^', label='regional')
pl.plot(y1,y2,'bo', label='local')
pl.legend( loc='upper left' )

ありがとうございました

15
Patrick

凡例に表示されるマーカーの数は、numpointsキーワードを使用して変更できます。

import matplotlib.pyplot as plt
import numpy as np
x1 = y1 = np.linspace(0, 10, 100)
x2 = np.sin(x1)
y2 = np.cos(y1)
plt.plot(x1,x2,'g--^', label='regional')
plt.plot(y1,y2,'b-o', label='local')
plt.legend( loc='upper left', numpoints = 1 )
plt.show()

enter image description here


マーカーが(デフォルトで)2度表示される理由は、matplotlibがマーカー間のラインスタイルコネクターを表示しようとしているためです。コネクタがないと少し変に見えます。

プロットが実線と破線の場合、

plt.plot(x1,x2,'g--^', label='regional')
plt.plot(y1,y2,'b-o', label='local')

凡例は次のようになります。

enter image description here

これで、凡例のマーカー間の(およびグラフ上の)線種の効果を確認できます。


凡例ハンドルがまったく必要ない場合は、次を使用できます

plt.legend(..., handlelength=0)

例えば、

import numpy as np
import matplotlib.pyplot as plt

x1 = y1 = np.linspace(0, 10, 100)
x2 = np.sin(x1)
y2 = np.cos(y1)
plt.plot(x1,x2,'g--^', label='regional')
plt.plot(y1,y2,'b-o', label='local')
plt.legend(loc='best', numpoints=1, handlelength=0)
plt.show()

enter image description here

あなたは使うことができます

plt.legend(loc='best', numpoints=1, handlelength=0, 
           markerscale=0, handletextpad=0)

凡例マーカーも削除します。

32
unutbu