2015-07-29 8 views
6

ggplot2 का उपयोग करके, मैं एक ट्रेंडलाइन कैसे आकर्षित कर सकता हूं जो पहलुओं के बीच चलता है।ggplot, पहलुओं के बीच बिंदु रेखाचित्र

library(ggplot2) 
df <- data.frame(y=c(1,2,3),x=1,Set=LETTERS[1:3]) 
ggplot(df,aes(x,y)) + 
    theme_bw() + theme(legend.position=c(0,1),legend.justification=c(0,1)) + 
    geom_point(aes(fill=Set),color="black",shape=21,size=3) + 
    facet_grid(~Set) + 
    xlim(1,5) 

निम्नलिखित में से कौन पैदा करता है:

Output

ऊपर में, मैं, तीन अंक के बीच एक रेखा खींचना पहलुओं पर चलने चाहते हैं।

+0

यह कारण है कि यह उपयोगी होगा करने के लिए के रूप में कुछ संदर्भ प्रदान करने के लिए उपयोगी हो सकता है एक लाइन के बीच का विस्तार करने के लिए एक्स मानों में ब्रेक के बावजूद ग्राफ। इसे प्राप्त करने का एक तरीका - यद्यपि मैन्युअल समायोजन की आवश्यकता है - दृश्य के क्षेत्र के बाहर बिंदु जोड़ना होगा (यानी एक्स-अक्ष सीमाओं के बाहर) जो अगले पैनल पर पहले बिंदु की स्थिति से मेल खाता है। –

+0

हा हा .. 'लाइब्रेरी (डीएफ) ', इसके बारे में खेद है .... –

+0

@ फिलिपपे मार्कैण्ड यह एक पेपर में तीन प्रयोगात्मक विन्यासों के बीच सामान्य व्यवहार का वर्णन करने के लिए है जो मैं लिख रहा हूं। –

उत्तर

15

आप ऐसा कर सकता है, लेकिन बंद करने क्लिप अवांछित परिणाम हो सकता है,

library(ggplot2) 
df <- data.frame(y=c(1,2,3),x=1,Set=LETTERS[1:3]) 
p <- ggplot(df,aes(x,y)) + 
    theme_bw() + theme(legend.position=c(0,1),legend.justification=c(0,1)) + 
    geom_point(aes(fill=Set),color="black",shape=21,size=3) + 
    facet_grid(~Set) + 
    xlim(1,5) 

gb <- ggplot_build(p) 
g <- ggplot_gtable(gb) 

library(gtable) 
# ggplot2 doesn't use native units in data space 
# instead, the data is rescaled to npc, i.e from 0 to 1 
# so we need to use the build info to convert from data to [0,1] 
ranges <- gb$layout$panel_ranges 
data2npc <- function(x, range) scales::rescale(c(range, x), c(0,1))[-c(1,2)] 

start <- c(data2npc(1, ranges[[1]][["x.range"]]), 
      data2npc(1, ranges[[1]][["y.range"]])) 

end <- c(data2npc(1, ranges[[3]][["x.range"]]), 
      data2npc(3, ranges[[3]][["y.range"]])) 
# starting position in the first panel 
g <- gtable_add_grob(g, moveToGrob(start[1],start[2]), 
        t = 7, l = 4) 
# draw line to end position in last panel 
g <- gtable_add_grob(g, lineToGrob(end[1],end[2]), 
        t = 7, l = 8, r=8, z=Inf) 
# turn clip off to see the line across panels 
g$layout$clip <- "off" 
grid.newpage() 
grid.draw(g) 

enter image description here

+0

मैं यह काम नहीं कर सकता, क्या यह पुराना है? "आर संस्करण 3.4.1, gtable_0.2.0, ggplot2_2.2.1" – zx8754

+1

@ zx8754; ggplot परिवर्तनों के कारण इसे अद्यतन करने की आवश्यकता है – user20650

+1

@ user20650 बहुत बहुत धन्यवाद! क्या यह एक ही समस्या है? https://stackoverflow.com/questions/42151880/ggplot-drawing-multiple-lines-across-facets/42171082#comment77259469_42171082 – zx8754

संबंधित मुद्दे