Karena jawaban lain di sini mengklaim yang s
menunjukkan area penanda, saya menambahkan jawaban ini untuk menjelaskan bahwa ini tidak selalu demikian.
Ukuran dalam poin ^ 2
Argumen s
dalam plt.scatter
menunjukkan markersize**2
. Seperti yang dikatakan dalam dokumentasi
s
: skalar atau array_like, bentuk (n,),
ukuran opsional dalam poin ^ 2. Defaultnya adalah rcParams ['lines.markersize'] ** 2.
Ini dapat dipahami secara harfiah. Untuk mendapatkan marker yang x poin besar, Anda harus menguadratkan angka itu dan memberikannya pada s
argumen.
Jadi hubungan antara penanda garis plot dan argumen ukuran sebaran adalah kuadrat. Untuk menghasilkan penanda sebar dengan ukuran yang sama dengan penanda plot dengan ukuran 10 poin maka Anda akan menelepon 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()
Koneksi ke "area"
Jadi mengapa jawaban lain dan bahkan dokumentasi berbicara tentang "area" ketika datang ke s
parameter?
Tentu saja satuan poin ** 2 adalah satuan luas.
- Untuk kasus khusus marker persegi
marker="s"
, luas marker memang langsung nilais
parameter.
- Untuk lingkaran, luas lingkaran adalah
area = pi/4*s
.
- Untuk marker lain mungkin tidak ada hubungan yang jelas dengan area marker.
Namun dalam semua kasus luas penanda sebanding dengan s
parameter . Ini adalah motivasi untuk menyebutnya "area" walaupun dalam banyak kasus sebenarnya tidak.
Menentukan ukuran marker pencar dalam hal jumlah yang sebanding dengan luas marker membuatnya sejauh ini masuk akal karena merupakan area marker yang dirasakan ketika membandingkan tambalan yang berbeda daripada panjang sisi atau diameternya. Yaitu menggandakan kuantitas yang mendasari harus menggandakan area marker.
Apa poinnya?
Sejauh ini jawaban untuk apa arti ukuran sebar marker diberikan dalam satuan poin. Poin sering digunakan dalam tipografi, di mana font ditentukan dalam poin. Linewidths juga sering ditentukan dalam poin. Ukuran standar titik dalam matplotlib adalah 72 poin per inci (ppi) - 1 titik karenanya 1/72 inci.
Mungkin bermanfaat untuk menentukan ukuran dalam piksel, bukan titik. Jika angka dpi adalah 72 juga, satu titik adalah satu piksel. Jika angka dpi berbeda (standar matplotlib adalah fig.dpi=100
),
1 point == fig.dpi/72. pixels
Sementara ukuran marker sebaran dalam poin karenanya akan terlihat berbeda untuk dpi gambar yang berbeda, orang dapat menghasilkan penanda 10 x 10 piksel ^ 2, yang akan selalu memiliki jumlah piksel yang sama untuk dicakup:
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()
Jika Anda tertarik dengan sebaran unit data, periksa jawaban ini .