matplotlib Legend Markers เพียงครั้งเดียว


238

ฉันมักพล็อตจุดบนพล็อต matplotlib ด้วย:

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

อย่างไรก็ตามสิ่งนี้ทำให้ตำนานใส่ดาวในตำนานเป็นสองเท่าเช่นที่ดูเหมือนว่า:

* * Global Optimum

เมื่อฉันต้องการให้มันดูเหมือน:

 *  Global Optimum

ฉันจะทำสิ่งนี้ได้อย่างไร


48
ฉันหวังว่าฉันจะสามารถตอบคำถามนี้ได้หลายครั้ง ฉันเกลียดการnumpoints=2ประชุมเริ่มต้นและรู้สึกโล่งใจที่เห็นใครบางคนได้ใช้เวลาในการซักถามและรับคำตอบ
Chris Redford

24
ใจ: ตัวเลือกสำหรับการกระจายคือscatterpoints=1
Marcos Alex

คำตอบ:


253

สิ่งนี้น่าจะใช้ได้:

legend(numpoints=1)

BTW ถ้าคุณเพิ่มบรรทัด

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

ไปยังไฟล์ matplotlibrc ของคุณแล้วนี่จะเป็นค่าเริ่มต้นใหม่

[ดูจุดกระจายทั้งหมดขึ้นอยู่กับพล็อตของคุณ]

API: ลิงก์ไปยังเอกสาร API


7
ขอบคุณ ฉันวิ่งเข้าไปในนี้วันนี้ด้วย ทำไมนี่ไม่ใช่ค่าเริ่มต้น?
saltycrane

คุณสามารถเพิ่มลิงก์ไปยัง api ได้หรือไม่ matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend ฉันสามารถแก้ไขได้ด้วยตัวเอง แต่ดูเหมือนจะหยาบคาย
tacaswell

2
มีวิธีใดบ้างที่จะลดพื้นที่ที่จุดเกิดขึ้นในตำนาน?
Yotam

3
@DMS: ฉันไม่เคยเห็นว่า ความผิดพลาดของฉัน. คุณควรเน้นเป็นรหัสเพื่อให้มองเห็นได้มากขึ้น
Marcos Alex

2
ในที่สุดก็มีแผนสำหรับ numpoints = 1 ให้เป็นค่าเริ่มต้นใน matplotlib 2.0! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein

25

ฉันต้องการเปลี่ยนพารามิเตอร์ matplotlib rc ของฉันแบบไดนามิกในสคริปต์หลามทุกตัว เพื่อให้บรรลุเป้าหมายนี้ฉันเพียงแค่ใช้บางอย่างเช่นตอนต้นไฟล์หลามของฉัน

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

สิ่งนี้จะใช้กับพล็อตทั้งหมดที่สร้างจากไฟล์ไพ ธ อนของฉัน

แก้ไข: สำหรับผู้ที่ไม่ชอบนำเข้า pylab คำตอบที่ยาวคือ

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.