Geom_point के आकार के सापेक्ष स्थिति के साथ geom_text या geom_label कैसे जोड़ें?

Jan 20 2021

मैं जो करने की कोशिश कर रहा हूं, वह geom_point के साथ बने बिंदुओं के लिए एक लेबल जोड़ रहा है जो आकार में एक चर मैप किया गया है। मान को लेबल में भी प्रदर्शित किया जाता है। टेक्स्ट या लेबल को केवल geom_point के अंतर्गत पोस्ट किया जाना चाहिए, लेकिन position_nudge के साथ इसे प्राप्त करना संभव नहीं लगता है।

मेरा कोड वर्तमान में इस तरह दिखता है (सरलीकृत):

ggplot(data, aes(x = var1, y = var2) +
   geom_point(aes(size = var3)) +
   geom_text(aes(label = var3))

परिणाम यह है

लेकिन मैं कुछ ऐसा हासिल करने की कोशिश कर रहा हूं:

क्या इसे सरल तरीके से प्राप्त करने का कोई तरीका है?

धन्यवाद।

संपादित करें: मैं कोशिश कर रहा हूँ कि geom_point की सीमा और लेबल की सीमा के बीच की दूरी एक निश्चित मान हो।

जवाब

1 tjebo Jan 21 2021 at 06:09

मुझे आशा है कि यह किसी अन्य उत्तर का गुणन करने के लिए पर्याप्त रूप से भिन्न है। मैं मानता हूं कि मैंने इस बात की अनदेखी कर दी है कि आप वास्तव में लेबलों को किस स्थिति में लाना चाहते हैं। इसलिए मूल रूप से आप इसे केंद्र के सापेक्ष नहीं, बल्कि त्रिज्या के सापेक्ष चाहते हैं।

मुझे यह महसूस हुआ कि इस समुदाय में मुझे अपना पहला पहला प्रश्न याद आ गया था , जिसके बारे में मैं स्वीकार करता हूं कि मैं इसका उत्तर बहुत लंबे समय से नहीं समझता था।

मूल विचार geom_point का उपयोग नहीं करना है , लेकिन ggforce :: geom_circle (या: geom_ellipse) का उपयोग करना है। आप त्रिज्या का उपयोग कर सकते हैं जो आप अपने लेबल की स्थिति के निर्माण के लिए उपयोग करते हैं। इसके लिए थोड़ी कठिन कोडिंग की आवश्यकता होती है, लेकिन मुझे यकीन है कि आपके सामान्य निर्देशांक के आधार पर प्रोग्राम को रेडियस को परिभाषित करने के तरीके होंगे।

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 को रेप्रेक्स पैकेज (v0.3.0) द्वारा बनाया गया

2 RuiBarradas Jan 20 2021 at 23:11

समस्या को स्केलिंग करके sizeऔर vjustअंकों तक दूरी से जोड़कर हल किया जा सकता है ।

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))

परीक्षण डेटा

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

प्रयोग करें nudge

डेटा के लिए रुई का धन्यवाद। +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 को रेप्रेक्स पैकेज (v0.3.0) द्वारा बनाया गया