Bagaimana saya menghindari label yang tumpang tindih dalam plot R? [Tutup]

44

Saya mencoba memberi label sebaran sederhana di R. Ini yang saya gunakan:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

Hasilnya biasa-biasa saja, seperti yang Anda lihat (klik untuk memperbesar):

masukkan deskripsi gambar di sini

Saya mencoba untuk mengkompensasi ini menggunakan textxyfungsi, tetapi itu tidak lebih baik . Membuat gambar itu sendiri lebih besar tidak berfungsi untuk kelompok padat.

Apakah ada fungsi atau cara mudah untuk mengkompensasi hal ini dan biarkan label R plot yang tidak tumpang tindih ?


Berikut adalah sebagian kecil dari data yang saya miliki:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205
slhck
sumber
1
Saya memposting pertanyaan serupa di sini , lihat jawabannya di sana ..
Curious
3
Saya menemukan solusinya ! The identify()membiarkan yang Anda secara manual memutuskan di mana untuk menempatkan label! Ini tidak ideal, tetapi dari solusi yang diusulkan ini bekerja paling baik untuk saya.
Penasaran

Jawaban:

29

Lihat paket baru ggrepel . ggrepel menyediakan geoms untuk ggplot2 untuk menolak label teks yang tumpang tindih. Ini berfungsi baik untuk geom_text dan geom_label.

masukkan deskripsi gambar di sini

Gambar diambil dari posting blog ini .

Sukhdeep Singh
sumber
19

The directlabelspaket melakukan itu. Dari halaman webnya :

Paket ini adalah upaya untuk membuat pelabelan langsung menjadi kenyataan dalam praktik statistik sehari-hari dengan menyediakan sekumpulan fungsi yang berguna yang membuat pelabelan langsung plot umum mudah dilakukan dengan sistem plot tingkat tinggi seperti kisi dan ggplot2.

Mungkin tidak selalu memungkinkan untuk plot padat.

Ini adalah contoh singkat:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

Saya berhasil menyingkirkan pewarnaan titik dengan col="black", tetapi label tidak.

Laurent
sumber
1
Saya kesulitan membuatnya bekerja. Bisakah Anda memberikan contoh kerja sederhana?
slhck
1
Dalam kasus Anda, sesuatu seperti direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))harus mendapatkan hasil yang serupa.
Laurent
Sempurna. Inilah yang akhirnya saya gunakan dengan contoh sederhana terakhir Anda. Label dan titik warna sebenarnya sangat bagus, karena Anda tahu di mana label berada.
slhck
1
Saya harus menggunakannya library(lattice)untuk mulai xyplotbekerja.
David J. Harris
14

Saya sarankan Anda melihat wordcloudpaket. Saya tahu paket ini berfokus bukan pada titik tetapi pada label itu sendiri, dan juga gaya tampaknya agak diperbaiki. Tapi tetap saja, hasil yang saya dapatkan dari menggunakannya sangat menakjubkan. Perhatikan juga bahwa versi paket yang dimaksud dirilis tentang waktu Anda mengajukan pertanyaan, jadi ini masih sangat baru.

http://blog.fellstat.com/?cat=11

output textplot ()

Mayor
sumber
9

Saya mengalami masalah yang sama dengan beberapa plot yang telah saya kerjakan dan menulis paket dasar yang menggunakan simulasi medan gaya untuk menyesuaikan lokasi objek. Keuntungan atas beberapa solusi yang dikutip di atas adalah penyesuaian dinamis untuk kedekatan objek relatif dalam 2D. Meskipun banyak perbaikan yang mungkin dilakukan, termasuk heuristik dan integrasi dengan ggplot, dll. Tampaknya menyelesaikan tugas. Berikut ini menggambarkan fungsi:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

Untuk saat ini tidak ada heuristik untuk berbagai bidang dan distribusi titik sebagai solusi memenuhi kebutuhan saya dan saya ingin mendapatkan sesuatu yang membantu orang keluar dengan cepat tetapi saya akan menambahkan ini dalam jangka menengah. Saat ini saya merekomendasikan penskalaan grafik ke 100x100 dan kembali dan sedikit mengutak-atik objek tarikan dan parameter tolakan default seperti yang dijamin.

gregk
sumber
8

Jika Anda tidak dapat membuat label berfungsi dengan benar seperti yang diproduksi oleh R, ingatlah bahwa Anda selalu dapat menyimpan grafik dalam format vektor (seperti .pdf) dan menariknya ke dalam program pengeditan seperti InkScape atau Adobe Illustrator.

Fomite
sumber
8

Beberapa alat tambahan untuk dilihat di R:

Ini tidak akan melakukan segalanya untuk Anda, tetapi salah satunya mungkin menjadi bagian dari solusi.

Greg Snow
sumber