Bir geom_point'in boyutuna göre konumlu geom_text veya geom_label nasıl eklenir?

Jan 20 2021

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

1 tjebo Jan 21 2021 at 06:09

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)

2 RuiBarradas Jan 20 2021 at 23:11

Problem ölçeklendirilerek sizeve vjustnoktalara 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))
2 tjebo Jan 21 2021 at 00:08

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)