Kontrol ukuran poin dalam sebar R?

116

Di R, plot()fungsi mengambil pchargumen yang mengontrol tampilan titik dalam plot. Saya membuat titik sebar dengan puluhan ribu titik dan lebih memilih titik kecil, tetapi tidak terlalu kecil. Pada dasarnya, saya merasa pch='.'terlalu kecil, tetapi pch=19terlalu gemuk. Apakah ada sesuatu di tengah atau cara untuk memperkecil titik-titik itu?

Nick
sumber
Daripada membuat titik menjadi lebih kecil, adakah cara untuk membuat plot dengan mengatakan 100 titik data acak akan lebih mudah dilihat daripada 1000?
pengguna2363642
Untuk banyak poin kecil, menggunakan alfa (transparansi) dapat membuat plot pencar jauh lebih informatif daripada hanya menggunakan lebih sedikit poin untuk memplotnya.
1
Saya sarankan untuk tidak menggunakan pch='.', itu akan menjadi off center. Sumber: Saya pch='.'sering menggunakan
geneorama
@geneorama Maksud Anda menggunakan ·bukan .?
nanaki
@nanaki kurang lebih, tetapi anehnya simbol Anda muncul sebagai kotak kecil ketika saya menggunakannya di R. Jawaban di bawah ini berfungsi dengan baik dalam menjelaskan pendekatan yang benar.
geneorama

Jawaban:

100

Coba cexargumennya:

?par

  • cex
    Nilai numerik yang memberikan jumlah pembesaran teks plot dan simbol harus relatif terhadap default. Perhatikan bahwa beberapa fungsi grafik seperti plot.default memiliki argumen dengan nama ini yang mengalikan parameter grafis ini, dan beberapa fungsi seperti titik menerima vektor nilai yang didaur ulang. Kegunaan lain hanya akan mengambil nilai pertama jika vektor dengan panjang lebih besar dari satu diberikan.
rcs
sumber
15
Saya tidak berpikir saya akan pernah menggunakan 'cex' untuk mengontrol ukuran simbol kecuali saya tidak punya pilihan lain. Ini hanya bekerja pada beberapa waktu; aturannya adalah bahwa ketika 'cex' diatur melalui 'par', itu mempengaruhi ukuran (sebagian besar) teks pada plot, ketika diatur di dalam 'plot', 'cex' hanya mempengaruhi ukuran simbol. Jadi jika Anda salah menerapkan aturan itu maka tidak hanya ukuran simbol Anda tidak berubah, tetapi Anda sekarang memiliki beberapa parameter yang memengaruhi ukuran teks (cex.axis, cex.lab, cex.main, dan cex.sub - semuanya melakukan hal yang sama pekerjaan sebagai 'cex', hanya sepotong-bijak). Kode seperti itu sulit untuk dipertahankan dan dikembangkan.
Doug
5
Setuju. Pengaturan cexglobal melalui parperubahan semua jenis hal, termasuk margin gambar, yang harus Anda perbaiki. pengaturan di cexdalam plot, bagaimanapun, tampaknya berhasil.
terbang
Nasihat yang dianut di atas oleh komentar doug tidak selalu salah tetapi secara signifikan melebih-lebihkan masalah potensial apa pun dengan menggunakan cexargumen saat merencanakan. Ada banyak, banyak contoh di mana itu berguna dan merupakan pilihan terbaik.
joran
lwdmengontrol lebar garis pch, misalnya plot(1:5, pch=1:5, col=1:5, lwd=1:5). Terima kasih untuk sthda.com/english/wiki/…
geneorama
95

pch = 20 mengembalikan simbol berukuran antara "." dan 19.

Ini adalah simbol yang terisi (yang mungkin Anda inginkan).

Selain itu, bahkan sistem grafik dasar di R memungkinkan pengguna untuk mengontrol ukuran simbol, warna, dan bentuk dengan baik. Misalnya,

dfx = data.frame(ev1=1:10, ev2=sample(10:99, 10), ev3=10:1)

with(dfx, symbols(x=ev1, y=ev2, circles=ev3, inches=1/3,
                  ann=F, bg="steelblue2", fg=NULL))

Contoh grafik

doug
sumber
Saya suka plot ini, tetapi saya ingin radiusnya sama dengan jumlah pengamatan pada titik itu, dapatkah Anda menunjukkan kepada saya bagaimana melakukan itu?
Derk Arts
pi*R^2(permukaan) harus proporsional dengan jumlah pengamatan.
SESman
5
@saratis Ini akan melakukan apa yang Anda inginkan:symbols(x=dfx$ev1, y=dfx$ev2, circles=sqrt(dfx$ev3/pi), inches=1/3, ann=F, bg="steelblue2", fg=NULL)
fmark
1
ada ide tentang bagaimana saya bisa menggunakan ini untuk memplot beberapa seri pada grafik yang sama? yaitu "poin (x = dfx2 $ ev1, y = dfx2 $ ev2, circle = dfx2 $ ev3, ...)" tidak berfungsi.
Neodyme
Jika Anda bertanya-tanya "Apa itu inci?" lihat di sini
MichaelChirico
22

Seperti yang dinyatakan rcs , cexakan melakukan pekerjaan dalam paket grafik dasar. Saya rasa Anda tidak ingin membuat grafik ggplot2tetapi jika Anda melakukannya, ada sizeatribut estetika, yang dapat Anda kontrol dengan mudah ( ggplot2memiliki argumen fungsi yang mudah digunakan: alih-alih mengetik cex(perluasan karakter), ggplot2Anda dapat mengetik misalnya size = 2dan Anda akan mendapatkan poin 2mm).

Berikut contohnya:

### base graphics ###
plot(mpg ~ hp, data = mtcars, pch = 16, cex = .9)

### ggplot2 ###
# with qplot()
qplot(mpg, hp, data = mtcars, size = I(2))
# or with ggplot() + geom_point()
ggplot(mtcars, aes(mpg, hp), size = 2) + geom_point()
# or another solution:
ggplot(mtcars, aes(mpg, hp)) + geom_point(size = 2)
aL3xa
sumber
4
Dan, jika Anda benar-benar merencanakan puluhan ribu titik, ggplot2 memiliki beberapa cara alternatif untuk membuatnya terlihat bagus - penyesuaian alfa, tempat sampah hex, plot kontur, dll. Lihat halaman 72-77 dari buku ggplot2, jika ada di perpustakaan Anda atau jika perpustakaan Anda memiliki akses elektronik ke buku Springer (menurut saya sebagian besar buku R ada di sana).
Matt Parker
Yup ... Saya terutama menggunakan alphadi scatterplots, untuk menghindari overplotting.
aL3xa
@ aL3xa Anda dapat menggunakan alfa dalam paket grafik dasar. Tambahkan saja misalnya col = rgb(0, 0, 0, 0.6)di opsi plot.
RobJan