2013-10-31 12 views
6

के साथ रीग्रेशन लाइन समीकरण और आर 2 जोड़ना मैंने ggplot के साथ एक पहलू स्कैटरप्लॉट बनाया है, लेकिन मैं प्रत्येक पहलू को रिग्रेशन लाइन समीकरण जोड़ने के लिए संघर्ष कर रहा हूं। साधारण मामला जहां कोई पहलू नहीं है, here का उत्तर दिया गया है लेकिन यह विधि एक पहलूदार साजिश तक नहीं बढ़ेगी।ggplot: फेसेट

किसी भी विचार को स्वच्छ फैशन में कैसे पूरा किया जाए?

+2

बेहतर कुछ प्रतिलिपि प्रस्तुत करने योग्य डेटा देने के लिए और क्या आप की कोशिश की है ... – agstudy

+5

एक लिंक है कि मैं पहले से ही मेरे सवाल में उपलब्ध करने का डुप्लिकेट अंक सुझाव प्रदान करते हैं। उस लिंक पर टिप्पणियों में से एक, जिसका उत्तर नहीं दिया गया था, एक समान प्रश्न पूछता है कि एक पहलू साजिश पर समीकरण कैसे जोड़ना है। ऐसा लगता है कि चाल लेबल के लिए 'वेक्टर'/'data.frame 'पास करने लगती है। मुझे विश्वास नहीं है कि यह एक डुप्लिकेट है। – TheComeOnMan

उत्तर

16

यहाँ एक उदाहरण इस answer

require(ggplot2) 
require(plyr) 

df <- data.frame(x = c(1:100)) 
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) 


lm_eqn = function(df){ 
    m = lm(y ~ x, df); 
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
     list(a = format(coef(m)[1], digits = 2), 
       b = format(coef(m)[2], digits = 2), 
      r2 = format(summary(m)$r.squared, digits = 3))) 
    as.character(as.expression(eq));     
} 

से शुरू कर रहा है दो समूहों जिस पर आप पहलू

df$group <- c(rep(1:2,50)) 

करना चाहते हैं के लिए दो समीकरण लेबल बनाएँ समूह

eq <- ddply(df,.(group),lm_eqn) 

और साजिश

p <- ggplot(data = df, aes(x = x, y = y)) + 
      geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) + 
      geom_point() 
p1 = p + geom_text(data=eq,aes(x = 25, y = 300,label=V1), parse = TRUE, inherit.aes=FALSE) + facet_grid(group~.) 
p1 

enter image description here

+0

@agstudy का उपयोग करता हूं, मैं 'geom_text' के बजाय 'एनोटेट' का उपयोग करने की कोशिश कर रहा हूं लेकिन मैं 'eq' डेटाफ्रेम या कॉलम' eq $ V1' को पास करने में असमर्थ हूं यह। क्या आप कृपया इसके साथ मेरी मदद कर सकते हैं? – TheComeOnMan

+0

@ जेटी 85, उपर्युक्त टिप्पणी के बावजूद, आपका उत्तर मेरी वर्तमान समस्या के लिए पूरी तरह से अच्छा काम करता है, इसलिए मैंने इसे पहले ही स्वीकार कर लिया है। हालांकि मैं अभी भी 'एनोटेट' का उपयोग करना चाहता हूं। – TheComeOnMan

+0

कोई समस्या नहीं है। हालांकि मुझे नहीं लगता कि 'एनोटेट' इस तरह काम करता है 'facet_grid' के साथ। agstudy का दृष्टिकोण बस पूरी तरह से अलग है। लेकिन मुझसे गलती हो सकती है। – JT85

4

क्या यह वही है जो आप चाहते हैं?

library(ggplot2); library(gridExtra) 
ggplot(iris, aes(Sepal.Length, Sepal.Width)) + 
    geom_point() + 
    geom_smooth(method="lm") + 
    facet_wrap(~ Species) 

grid.newpage() 
vpa_ <- viewport(width = 1, height = 1) 
print(p, vp = vpa_) 
grid.text("y ~ mx + b", x=0.3, y=0.8) 
grid.text("y ~ mx + b", x=0.5, y=0.8) 
grid.text("y ~ mx + b", x=0.8, y=0.8) 

enter image description here

+0

धन्यवाद, लेकिन मुझे समीकरण को अधिक महत्वपूर्ण रूप से चाहिए। – TheComeOnMan

+0

मुझे लगता है कि आप एक वेक्टर/सूची/आदि पास कर सकते हैं। इस तरह के http://stackoverflow.com/questions/11889625/annotating-text-on-individual-facet-in-ggplot2 – sckott

+0

आप शायद सही हैं। आपके द्वारा दिए गए लिंक में, उत्तर दिया गया है कि वेक्टर को 'एनोटेट' के लिए पास नहीं कर रहा है। क्या आप जानते हैं कि वह काम कैसे करना है? – TheComeOnMan

3

gridExtra का उपयोग करके आप व्यवस्था कर सकते हैं तुम्हारा इस तरह भूखंडों।

enter image description here

library(ggplot2) 

library(ggplot2) 
iris$x = iris$Sepal.Length 
iris$y = iris$Sepal.Width 
xx <- range(iris$x) 
yy <- range(iris$y) 

ll <- by(iris,iris$Species,function(df){ 
    x.eq <- max(xx)-mean(xx)/2 
    y.eq <- max(yy)*0.95 
    p <- ggplot(df, aes(x, y)) + 
    geom_point() + 
    geom_smooth(method="lm") + 
    annotate(x=x.eq, y =y.eq , geom='text', 
       label = lm_eqn(df), size=5,parse=TRUE) + 
    xlim(xx[1],xx[2])+ylim(yy[1],yy[2]) 
}) 

library(gridExtra) 
do.call(grid.arrange,ll) 
+0

धन्यवाद है। 'grid.arrange'' facet_grid' की तुलना में 'facet_wrap' की तरह काम करता प्रतीत होता है। क्या वह सही है? यदि ऐसा है, तो मैं काम करने के लिए 'facet_grid' प्रकार का समाधान प्राप्त करना चाहता हूं। – TheComeOnMan