Setiap kali saya membuat plot menggunakan ggplot, saya menghabiskan sedikit waktu sambil mencoba nilai yang berbeda untuk hjust dan vjust dalam garis seperti
+ opts(axis.text.x = theme_text(hjust = 0.5))
untuk mendapatkan label sumbu untuk berbaris di mana label sumbu hampir menyentuh sumbu, dan rata terhadapnya (dibenarkan untuk sumbu, sehingga untuk berbicara). Namun, saya tidak begitu mengerti apa yang sedang terjadi. Seringkali, hjust = 0.5
memberikan hasil yang sangat berbeda dari hjust = 0.6
, misalnya, bahwa saya belum dapat mengetahuinya hanya dengan bermain-main dengan nilai yang berbeda.
Adakah yang bisa mengarahkan saya ke penjelasan komprehensif tentang cara kerja opsi hjust dan vjust?
Jawaban:
Nilai
hjust
danvjust
hanya didefinisikan antara 0 dan 1:Sumber: ggplot2, Hadley Wickham, halaman 196
(Ya, saya tahu bahwa dalam kebanyakan kasus Anda dapat menggunakannya di luar kisaran ini, tetapi jangan berharap itu berperilaku dengan cara tertentu. Ini di luar spesifikasi.)
hjust
mengontrol justifikasi horisontal danvjust
mengontrol justifikasi vertikal.Contoh harus menjelaskan ini:
Untuk memahami apa yang terjadi ketika Anda mengubah
hjust
teks sumbu, Anda perlu memahami bahwa perataan horisontal untuk teks sumbu didefinisikan dalam kaitannya bukan dengan sumbu x, tetapi dengan keseluruhan plot (di mana ini termasuk teks sumbu y). (Menurut saya, ini disayangkan. Akan jauh lebih bermanfaat untuk memiliki keberpihakan relatif terhadap sumbu.)Untuk menjelajahi apa yang terjadi dengan
vjust
penghilangan label sumbu:sumber
Error in grid.Call("L_textBounds", as.graphicsAnnot(x$label), x$x, x$y, : Polygon edge not found (zero-width or zero-height?)
untukvjust = .72
dan lebih tinggi.Mungkin yang paling pasti adalah Gambar B.1 (d) dari buku ggplot2, lampirannya tersedia di http://ggplot2.org/book/appendices.pdf .
Namun, itu tidak sesederhana itu.
hjust
danvjust
seperti yang dijelaskan ada cara kerjanyageom_text
dantheme_text
(kadang-kadang). Salah satu cara untuk memikirkannya adalah dengan memikirkan sebuah kotak di sekitar teks, dan di mana titik referensi terkait dengan kotak itu, dalam satuan relatif terhadap ukuran kotak (dan dengan demikian berbeda untuk teks dengan ukuran yang berbeda). Sebuahhjust
0,5 danvjust
0,5 pusat kotak pada titik referensi. Mengurangihjust
memindahkan kotak tepat dengan jumlah kali lebar kotak0.5-hjust
. Jadi ketikahjust=0
, tepi kiri kotak berada di titik referensi. Meningkatkanhjust
memindahkan kotak yang ditinggalkan oleh jumlah kali lebar kotakhjust-0.5
. Kapanhjust=1
, kotak dipindahkan setengah lebar kotak kiri dari pusat, yang menempatkan tepi kanan pada titik referensi. Jikahjust=2
, tepi kanan kotak adalah lebar kotak kiri dari titik referensi (tengah adalah2-0.5=1.5
lebar kotak kiri dari titik referensi. Untuk vertikal, lebih sedikit naik dan lebih banyak turun. Ini secara efektif seperti Gambar B.1 (d ) mengatakan, tetapi meramalkan lebih dari [0,1].Tapi, terkadang ini tidak berhasil. Sebagai contoh
Tiga plot terakhir identik. Saya tidak tahu mengapa itu terjadi. Juga, jika teks diputar, maka itu lebih rumit. Mempertimbangkan
Yang pertama memiliki label dibenarkan kiri (terhadap bagian bawah), yang kedua memiliki mereka berpusat di beberapa kotak sehingga pusat mereka berbaris, dan yang ketiga memiliki mereka dibenarkan (sehingga sisi kanan mereka berbaris di sebelah sumbu). Yang terakhir, yah, saya tidak bisa menjelaskan dengan cara yang koheren. Ini ada hubungannya dengan ukuran teks, ukuran teks terluas, dan saya tidak yakin apa lagi.
sumber
DF <- data.frame(x=c("a\na","b","cdefghijk","l"),y=1:4)
- yaitu dengan\n
linebreak di salah satu judul.hjust
danvjust
hanya didefinisikan antara 0 dan 1; perilaku di luar rentang itu tidak perlu masuk akal.hjust=0
sejajarkan tepi kiri dengan tic;hjust=0.5
berpusat pada tic;hjust=1
sejajarkan tepi kanan dengan tic (kotak bergerak relatif terhadap titik referensi). Tapivjust
sejajarkan dalam kotak ukuran label tertinggi.vjust
label sumbu, semua label secara bersamaan disejajarkan satu sama lain. Jadi semua tepi atas sejajarkan kapanvjust=1
dan juga semua tepi bawah kapanvjust=0
. Ini masuk akal bagi saya.