Bagaimana cara menambahkan geom_text atau geom_label dengan posisi relatif terhadap ukuran geom_point?
Apa yang saya coba lakukan, adalah menambahkan label ke poin yang dibuat dengan geom_point yang memiliki variabel yang dipetakan ke ukurannya. Nilainya juga ditampilkan di label. Teks atau label harus diposisikan tepat di bawah geom_point, tetapi mencapai ini dengan position_nudge tampaknya tidak mungkin.
Kode saya saat ini terlihat seperti ini (disederhanakan):
ggplot(data, aes(x = var1, y = var2) +
geom_point(aes(size = var3)) +
geom_text(aes(label = var3))
Hasilnya begini
tetapi saya mencoba mencapai sesuatu seperti ini:
Adakah cara untuk mencapai ini dengan cara yang sederhana?
Terima kasih.
EDIT: Saya mencoba agar jarak antara batas geom_point dan batas label menjadi nilai tetap.
Jawaban
Saya harap ini cukup berbeda untuk mendapatkan jawaban lain. Saya akui saya telah mengabaikan sedikit tentang apa sebenarnya yang Anda inginkan untuk memposisikan label. Jadi pada dasarnya Anda menginginkannya tidak relatif terhadap pusat titik, tetapi jari-jarinya.
Saya merasa sangat bernostalgia dengan pertanyaan pertama saya di komunitas ini , yang saya akui saya belum memahami jawabannya untuk waktu yang lama.
Ide dasarnya adalah tidak menggunakan geom_point , tetapi menggunakan ggforce :: geom_circle (atau: geom_ellipse). Anda dapat menggunakan radius yang Anda gunakan untuk pembuatan untuk memposisikan label Anda. Ini membutuhkan sedikit pengkodean keras, tetapi saya yakin akan ada cara untuk menentukan radius secara terprogram berdasarkan koordinat umum Anda.
library(ggplot2)
library(ggforce)
foo <- data.frame(var1 = rep(1:3, 2), var2 =rep(1:2, each = 3),
var3 = c(3, 10, 2, 1, 1, 10))
# Create cuts - you can also assign other values of course. factor of 0.01 was chosen randomly.
foo$rad <- 0.01 * findInterval(foo$var3, 1:5)
ggplot(foo) +
geom_circle(aes(x0 = var1, y0 = var2, r = rad),
fill = "Grey50") +
geom_text(aes(x = var1, y = var2 - rad - 0.03, label = var3)) +
coord_equal()
Dibuat pada 2021-2020 oleh paket reprex (v0.3.0)
Masalahnya bisa diselesaikan dengan menskalakan size
dan menambahkannya ke vjust
jarak ke poin.
library(ggplot2)
ggplot(data, aes(x = var1, y = var2)) +
geom_point(aes(size = var3), show.legend = FALSE) +
geom_text(aes(label = var3, vjust = 1.5 + 0.1 * var3))
Uji data
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
Menggunakan nudge
Terima kasih kepada Rui untuk datanya. +1
library(ggplot2)
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
ggplot(data, aes(x = var1, y = var2)) +
geom_point(aes(size = var3), show.legend = FALSE) +
geom_text(aes(label = var3), nudge_y = -0.1 )
Dibuat pada 2021-2020 oleh paket reprex (v0.3.0)