matplotlib Legend Markers Only Once

238

Saya sering merencanakan titik pada plot matplotlib dengan:

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

Namun, ini menyebabkan legenda menempatkan bintang dalam legenda dua kali, sehingga terlihat seperti:

* * Global Optimum

ketika saya benar-benar ingin terlihat seperti:

 *  Global Optimum

Bagaimana saya melakukan ini?

carl
sumber
48
Saya berharap saya dapat menjawab pertanyaan ini berulang kali. Saya BENCI numpoints=2konvensi default dan merasa lega melihat seseorang telah meluangkan waktu untuk bertanya tentang hal itu dan mendapatkan jawaban.
Chris Redford
24
Pikiran: opsi untuk sebar adalahscatterpoints=1
Marcos Alex

Jawaban:

253

Ini seharusnya bekerja:

legend(numpoints=1)

BTW, jika Anda menambahkan baris

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

ke file matplotlibrc Anda, maka ini akan menjadi default baru.

[Lihat juga titik sebar, tergantung plot Anda.]

API: Tautan ke dokumen API

DSM
sumber
7
Terima kasih. Saya juga mengalami hal ini hari ini. Mengapa ini bukan default?
saltycrane
Bisakah Anda menambahkan tautan ke api? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Saya hanya bisa mengeditnya sendiri, tapi itu tampak kasar.
tacaswell
2
Apakah ada cara untuk mengurangi area yang menjadi tujuan legenda?
Yotam
3
@ DD: Saya belum melihat itu. Kesalahanku. Anda juga harus menyorotnya sebagai kode agar lebih terlihat.
Marcos Alex
2
Akhirnya, ada rencana untuk numpoints = 1 sebagai default di matplotlib 2.0! Sabas! github.com/matplotlib/matplotlib/issues/4854
DanHickstein
25

Saya suka mengubah parameter rc matplotlib saya secara dinamis di setiap skrip python. Untuk mencapai tujuan ini saya cukup menggunakan sesuatu seperti itu di awal file python saya.

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

Ini akan berlaku untuk semua plot yang dihasilkan dari file python saya.

EDIT: Bagi mereka yang tidak suka mengimpor pylab, jawabannya adalah

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
mcgagnon
sumber