Bởi vì các câu trả lời khác ở đây cho rằng s
biểu thị khu vực của điểm đánh dấu, tôi thêm câu trả lời này để làm rõ rằng điều này không nhất thiết phải như vậy.
Kích thước tính theo điểm ^ 2
Các đối số s
trong plt.scatter
biểu thị markersize**2
. Như tài liệu nói
s
: vô hướng hoặc mảng_like, hình dạng (n,),
kích thước tùy chọn trong các điểm ^ 2. Mặc định là RCParams ['lines.markersize'] ** 2.
Điều này có thể được thực hiện theo nghĩa đen. Để có được điểm đánh dấu x điểm lớn, bạn cần bình phương số đó và đưa nó vào s
đối số.
Vì vậy, mối quan hệ giữa các điểm đánh dấu của một biểu đồ đường và đối số kích thước phân tán là hình vuông. Để tạo một điểm đánh dấu phân tán có cùng kích thước với điểm đánh dấu lô có kích thước 10 điểm, do đó bạn sẽ gọi 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()
Kết nối với "khu vực"
Vậy tại sao các câu trả lời khác và thậm chí tài liệu nói về "diện tích" khi nói đến s
tham số?
Tất nhiên đơn vị của điểm ** 2 là đơn vị diện tích.
- Đối với trường hợp đặc biệt của điểm đánh dấu vuông,
marker="s"
diện tích của điểm đánh dấu thực sự trực tiếp là giá trị của s
tham số.
- Đối với một vòng tròn, diện tích của vòng tròn là
area = pi/4*s
.
- Đối với các điểm đánh dấu khác, thậm chí có thể không có bất kỳ mối quan hệ rõ ràng nào với khu vực của điểm đánh dấu.
Tuy nhiên, trong mọi trường hợp, diện tích của điểm đánh dấu tỷ lệ thuận với s
tham số . Đây là động lực để gọi nó là "khu vực" mặc dù trong hầu hết các trường hợp, nó không thực sự.
Việc chỉ định kích thước của các điểm đánh dấu phân tán theo một số lượng tỷ lệ thuận với diện tích của điểm đánh dấu có ý nghĩa rất xa vì đó là khu vực của điểm đánh dấu được cảm nhận khi so sánh các miếng vá khác nhau thay vì chiều dài hoặc đường kính của nó. Tức là nhân đôi số lượng cơ bản nên nhân đôi diện tích của điểm đánh dấu.
Điểm là gì?
Cho đến nay, câu trả lời cho kích thước của điểm đánh dấu phân tán có nghĩa là gì được đưa ra theo đơn vị điểm. Điểm thường được sử dụng trong kiểu chữ, trong đó phông chữ được chỉ định trong điểm. Ngoài ra băng thông thường được chỉ định trong các điểm. Kích thước tiêu chuẩn của các điểm trong matplotlib là 72 điểm mỗi inch (ppi) - 1 điểm là 1/72 inch.
Có thể hữu ích khi có thể chỉ định kích thước bằng pixel thay vì điểm. Nếu con số dpi là 72, một điểm là một pixel. Nếu hình dpi khác nhau (mặc định là matplotlib fig.dpi=100
),
1 point == fig.dpi/72. pixels
Do đó, kích thước của các điểm đánh dấu phân tán theo các điểm sẽ khác nhau đối với các hình khác nhau, nhưng người ta có thể tạo ra một điểm đánh dấu 10 x 10 pixel ^ 2, sẽ luôn có cùng số pixel được bao phủ:
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()
Nếu bạn quan tâm đến sự phân tán trong các đơn vị dữ liệu, hãy kiểm tra câu trả lời này .