Bir geom_point'in boyutuna göre konumlu geom_text veya geom_label nasıl eklenir?
Yapmaya çalıştığım şey, boyuta eşlenmiş bir değişkeni olan geom_point ile yapılan noktalara bir etiket eklemek. Değer ayrıca etikette de görüntülenir. Metin veya etiket, geom_point'in hemen altına yerleştirilmelidir, ancak bunu position_nudge ile gerçekleştirmek mümkün görünmemektedir.
Kodum şu anda şöyle görünüyor (basitleştirilmiş):
ggplot(data, aes(x = var1, y = var2) +
geom_point(aes(size = var3)) +
geom_text(aes(label = var3))
Sonuç bu
ama bunun gibi bir şey başarmaya çalışıyorum:
Bunu basit bir şekilde başarmanın bir yolu var mı?
Teşekkürler.
DÜZENLEME: Geom_point'in sınırı ile etiketlerin sınırı arasındaki mesafenin sabit bir değer olmasına çalışıyorum.
Yanıtlar
Umarım bu, başka bir cevabı hak edecek kadar farklıdır. Etiketleri tam olarak yerleştirmek istediğiniz şeyin birazını gözden kaçırdığımı itiraf ediyorum. Yani temelde onu nokta merkezine göre değil, yarıçapa göre istiyorsunuz.
Bu toplulukta , cevabını çok uzun zamandır anlamadığımı itiraf ettiğim, kendi ilk sorumun oldukça nostaljik bir şekilde hatırlatıldığını hissettim .
Temel fikir geom_point kullanmak değil , ggforce :: geom_circle (veya: geom_ellipse) kullanmaktır. Etiketlerinizi konumlandırmak için oluştururken kullandığınız yarıçapı kullanabilirsiniz. Biraz sabit kodlama gerektirir, ancak yarıçapı genel koordinatlarınıza göre programlı olarak tanımlamanın yolları olacağından eminim.
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()
2021-01-20 tarihinde reprex paketi tarafından oluşturuldu (v0.3.0)
Problem ölçeklendirilerek size
ve vjust
noktalara olan mesafeye eklenerek çözülebilir .
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))
Test verisi
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
Kullanım nudge
Veriler için Rui'ye teşekkürler. +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 )
2021-01-20 tarihinde reprex paketi tarafından oluşturuldu (v0.3.0)