เนื่องจากคำตอบอื่น ๆ ที่นี่อ้างว่าs
แสดงถึงพื้นที่ของเครื่องหมายฉันจึงเพิ่มคำตอบนี้เพื่อชี้แจงว่าไม่จำเป็นต้องเป็นกรณีนี้
ขนาดเป็นคะแนน ^ 2
อาร์กิวเมนต์s
ในซึกplt.scatter
markersize**2
ตามที่เอกสารระบุไว้
s
: scalar หรือ array_like, รูปร่าง (n,),
ขนาดเสริมในหน่วยคะแนน ^ 2 ค่าเริ่มต้นคือ rcParams ['lines.markersize'] ** 2
นี้สามารถนำมาอย่างแท้จริง ในการที่จะได้มาร์กเกอร์ซึ่งเป็นจุดใหญ่ x คุณจะต้องยกกำลังสองจำนวนนั้นและให้มันกับการs
โต้แย้ง
ดังนั้นความสัมพันธ์ระหว่างเครื่องหมายของพล็อตบรรทัดและอาร์กิวเมนต์ขนาดการกระจายคือสี่เหลี่ยม เพื่อผลิตเครื่องหมายกระจายขนาดเดียวกันเป็นเครื่องหมายพล็อตขนาด 10 scatter( .., s=100)
คะแนนคุณจึงจะเรียก
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([0],[0], marker="o", markersize=10)
ax.plot([0.07,0.93],[0,0], linewidth=10)
ax.scatter([1],[0], s=100)
ax.plot([0],[1], marker="o", markersize=22)
ax.plot([0.14,0.86],[1,1], linewidth=22)
ax.scatter([1],[1], s=22**2)
plt.show()
การเชื่อมต่อกับ "พื้นที่"
เหตุใดจึงต้องมีคำตอบอื่น ๆ และแม้แต่เอกสารอธิบายเกี่ยวกับ "พื้นที่" เมื่อพูดถึงs
พารามิเตอร์
แน่นอนหน่วยคะแนน ** 2 เป็นหน่วยพื้นที่
- สำหรับกรณีพิเศษของเครื่องหมายสี่เหลี่ยมจัตุรัส
marker="s"
พื้นที่ของเครื่องหมายแน่นอนโดยตรงกับค่าของs
พารามิเตอร์
area = pi/4*s
สำหรับแวดวงพื้นที่ของวงกลมคือ
- สำหรับเครื่องหมายอื่น ๆ อาจไม่มีความสัมพันธ์ใด ๆ ที่ชัดเจนกับพื้นที่ของเครื่องหมาย
ในทุกกรณี แต่พื้นที่ของเครื่องหมายที่เป็นสัดส่วนกับs
พารามิเตอร์ นี่คือแรงจูงใจที่จะเรียกมันว่า "พื้นที่" แม้ว่าในกรณีส่วนใหญ่มันไม่ได้เป็นจริง
การระบุขนาดของเครื่องหมายการกระจายในแง่ของปริมาณซึ่งเป็นสัดส่วนกับพื้นที่ของเครื่องหมายที่ทำให้ในความหมายที่เป็นพื้นที่ของเครื่องหมายที่รับรู้เมื่อเปรียบเทียบแพทช์ที่แตกต่างกันมากกว่าความยาวด้านหรือเส้นผ่าศูนย์กลาง นั่นคือการเพิ่มปริมาณพื้นฐานเป็นสองเท่าควรเพิ่มพื้นที่ของเครื่องหมาย
คะแนนคืออะไร
จนถึงตอนนี้คำตอบของขนาดเครื่องหมายของการกระจายหมายถึงการให้ในหน่วยของคะแนน คะแนนมักจะใช้ในการพิมพ์ที่มีการระบุแบบอักษรในจุด นอกจากนี้ยังมีการระบุ linewidths เป็นจุด ขนาดมาตรฐานของคะแนนใน matplotlib คือ 72 คะแนนต่อนิ้ว (ppi) - 1 จุดจึงเท่ากับ 1/72 นิ้ว
อาจมีประโยชน์ในการระบุขนาดเป็นพิกเซลแทนคะแนน หากตัวเลข dpi เป็น 72 เช่นกันจุดหนึ่งคือหนึ่งพิกเซล หากตัวเลข dpi แตกต่าง (ค่าเริ่มต้นของ matplotlib คือfig.dpi=100
)
1 point == fig.dpi/72. pixels
ในขณะที่ขนาดของตัวทำเครื่องหมายกระจายในคะแนนจะดูแตกต่างกันสำหรับรูป dpi ที่แตกต่างกัน แต่สามารถสร้างเครื่องหมาย 10 x 10 พิกเซล ^ 2 ซึ่งมักจะมีจำนวนพิกเซลที่ครอบคลุมอยู่เสมอ:
import matplotlib.pyplot as plt
for dpi in [72,100,144]:
fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
ax.set_title("fig.dpi={}".format(dpi))
ax.set_ylim(-3,3)
ax.set_xlim(-2,2)
ax.scatter([0],[1], s=10**2,
marker="s", linewidth=0, label="100 points^2")
ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
marker="s", linewidth=0, label="100 pixels^2")
ax.legend(loc=8,framealpha=1, fontsize=8)
fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
plt.show()
หากคุณสนใจที่จะกระจายข้อมูลหน่วยตรวจสอบคำตอบนี้