matplotlib凡例マーカーは1回だけ


238

私はしばしばmatplotlibプロットに点をプロットします:

x = 10
y = 100
plot(x, y, "k*", label="Global Optimum")
legend()

ただし、これにより、凡例は星を凡例に2回配置し、次のようになります。

* * Global Optimum

私が本当にそれを次のようにしたいとき:

 *  Global Optimum

どうすればよいですか?


48
この質問に何度も賛成できればいいのですが。私はデフォルトのnumpoints=2慣習を嫌い、誰かがすでに時間をかけてそれについて尋ねて答えを得ているのを見て安心しました。
Chris Redford

24
心:散布図のオプションはscatterpoints=1
Marcos Alex

回答:


253

これはうまくいくはずです:

legend(numpoints=1)

ところで、あなたが行を追加した場合

legend.numpoints     : 1      # the number of points in the legend line

あなたのmatplotlibrcファイルに、これは新しいデフォルトになります。

[プロットに応じて、散布図も参照してください。]

API:APIドキュメントへのリンク


7
ありがとう。今日もこれに遭遇しました。なぜこれがデフォルトではないのですか?
ソルティクレーン

APIへのリンクを追加できますか?matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend 自分で編集することもできますが、失礼なようです。
tacaswell 2013

2
ポイントが凡例に占める面積を減らす方法はありますか?
Yotam

3
@DMS:私はそれを見ていませんでした。私の間違い。見やすくするために、コードとして強調表示する必要もあります。
マルコスアレックス

2
ついに、numpoints = 1をmatplotlib 2.0でデフォルトにする計画があります!フザー!github.com/matplotlib/matplotlib/issues/4854
DanHickstein

25

すべてのpythonスクリプトでmatplotlib rcパラメーターを動的に変更したい。この目標を達成するには、Pythonファイルの冒頭でこのようなものを使用するだけです。

from pylab import *
rcParams['legend.numpoints'] = 1

これは、私のpythonファイルから生成されたすべてのプロットに適用されます。

編集:pylabをインポートしたくない人にとって、長い答えは

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.