Dalam dokumen pyplot untuk sebar plot:
matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
faceted=True, verts=None, hold=None, **kwargs)
Ukuran marker
s: ukuran dalam poin ^ 2. Ini adalah skalar atau array dengan panjang yang sama dengan x dan y.
Unit apa itu points^2
? Apa artinya? Apakah s=100
artinya10 pixel x 10 pixel
?
Pada dasarnya saya mencoba membuat plot pencar dengan ukuran penanda yang berbeda, dan saya ingin mencari tahu apa arti s
angka tersebut.
s=20
ukuran marker sama denganfontsize=20
huruf?fontsize=20
huruf setinggi 20 pts (atau apa pun karakter referensi dalam font adalah 20 pts tinggi).matplotlib.pyplot.plot()
memilikims
parameter (markersize
) setara denganmatplotlib.pyplot.scatter()
parameters
(size
). Hanya pengingat ..Jawaban:
Ini bisa menjadi cara yang agak membingungkan untuk menentukan ukuran tetapi pada dasarnya Anda menentukan area marker. Ini berarti, untuk menggandakan lebar (atau tinggi) marker, Anda perlu menambah
s
dengan faktor 4. [karena A = W H => (2W) (2H) = 4A]Namun, ada alasan bahwa ukuran marker didefinisikan dengan cara ini. Karena penskalaan area sebagai kuadrat lebar, menggandakan lebar sebenarnya tampak meningkatkan ukuran lebih dari satu faktor 2 (pada kenyataannya ia meningkatkannya dengan faktor 4). Untuk melihat ini perhatikan dua contoh berikut dan output yang mereka hasilkan.
memberi
Perhatikan bagaimana ukurannya meningkat dengan sangat cepat. Jika sebaliknya kita miliki
memberi
Sekarang ukuran jelas dari penanda meningkat secara linear secara intuitif.
Adapun makna yang tepat dari apa 'titik' itu, cukup sewenang-wenang untuk merencanakan tujuan, Anda hanya dapat skala semua ukuran Anda dengan konstanta sampai mereka terlihat masuk akal.
Semoga ini membantu!
Edit: (Menanggapi komentar dari @Emma)
Mungkin kata-kata yang membingungkan di pihak saya. Pertanyaan yang diajukan tentang menggandakan lebar lingkaran sehingga pada gambar pertama untuk setiap lingkaran (saat kami bergerak dari kiri ke kanan) lebarnya dua kali lipat sehingga untuk area ini adalah eksponensial dengan basis 4. Demikian pula contoh kedua setiap lingkaran memiliki luas dua kali lipat yang terakhir yang memberikan eksponensial dengan basis 2.
Namun itu adalah contoh kedua (di mana kita adalah area penskalaan) bahwa area penggandaan tampaknya membuat lingkaran dua kali lebih besar bagi mata. Jadi jika kita ingin sebuah lingkaran muncul faktor yang
n
lebih besar kita akan menambah luas dengan faktorn
bukan jari-jari sehingga ukuran yang terlihat berskala linier dengan area tersebut.Edit untuk memvisualisasikan komentar oleh @TomaszGandor:
Ini seperti apa fungsi yang berbeda dari ukuran marker:
sumber
s
nilai sesuai dengan ukuran jendela gambar? Maksud saya, jika kita memaksimalkan angka windows, saya ingin memiliki tanda ukuran yang lebih besar.4 ** n
dan2 ** n
, tapin ** 4
dann ** 2
. Dengan2 ** n
plot kedua tidak skala secara linear dalam hal diameter lingkaran. Itu masih berjalan terlalu cepat (hanya saja tidak terlalu banyak di atas).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
dalamplt.scatter
menunjukkanmarkersize**2
. Seperti yang dikatakan dalam dokumentasiIni 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)
.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.
marker="s"
, luas marker memang langsung nilais
parameter.area = pi/4*s
.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
),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:
Jika Anda tertarik dengan sebaran unit data, periksa jawaban ini .
sumber
Anda dapat menggunakan markersize untuk menentukan ukuran lingkaran dalam metode plot
Dari sini
sumber
Ini adalah area penanda. Maksud saya jika Anda memiliki
s1 = 1000
dan kemudians2 = 4000
, hubungan antara jari-jari lingkaran masing-masing adalah:r_s2 = 2 * r_s1
. Lihat plot berikut:Saya memiliki keraguan yang sama ketika saya melihat posting, jadi saya melakukan contoh ini kemudian saya menggunakan penggaris di layar untuk mengukur jari-jari.
sumber
Saya juga berusaha menggunakan 'sebar' pada awalnya untuk tujuan ini. Setelah sedikit waktu terbuang - saya memutuskan solusi berikut.
Ini didasarkan pada jawaban untuk pertanyaan ini
sumber
Jika ukuran lingkaran sesuai dengan kuadrat parameter di
s=parameter
, maka tetapkan akar kuadrat untuk setiap elemen yang Anda tambahkan ke array ukuran Anda, seperti ini:s=[1, 1.414, 1.73, 2.0, 2.24]
sehingga ketika mengambil nilai-nilai ini dan mengembalikannya, peningkatan ukuran relatifnya akan menjadi akar kuadrat dari progresi kuadrat, yang mengembalikan progresi linier.Jika saya harus persegi masing-masing karena mendapat output ke plot:
output=[1, 2, 3, 4, 5]
. Coba interpretasi daftar:s=[numpy.sqrt(i) for i in s]
sumber
i in output
tidak?