2016-09-29 31 views
5

में लीजेंड स्थान मैं आर के लिए नया हूं, अकेले ggplot दें, इसलिए मैं नीचे दिए गए उदाहरण के साथ किसी भी मुद्दे के लिए अग्रिम क्षमा चाहता हूं।संयुक्त ggplot

मौजूदा प्रश्नों के उदाहरणों का उपयोग करके, मैंने दो अलग-अलग ggplots को गठबंधन करने के लिए कोड एकत्र करने का प्रयास किया है। मैं सोच रहा हूं कि ग्राफ के ऊपर स्थित अंतिम साजिश की किंवदंती कैसे मैं आगे बढ़ सकता हूं। मैंने legg.postion को व्यक्तिगत ggplots के लिए "शीर्ष" में बदलने का प्रयास किया है, लेकिन ऐसा लगता है कि यह काम नहीं करता है।

(ध्यान दें कि मैं दूसरे y- अक्ष के निर्माण को छोड़ दिया है कि मैं क्या लगता है कि मेरी समस्या को वर्णन करने की जरूरत है की एक न्यूनतम करने के लिए उदाहरण में कोड रखने के लिए)

library(ggplot2) 
    library(gtable) 
    library(reshape2) 
    library(grid) 
    library(scales) 

    df.test <- data.frame(
     x_cat = factor(c(1, 2, 3, 4)), 
     count = seq(1:4), 
     line1 = seq(from = 1, to = 4, length.out = 4), 
     line2 = seq(from = 0, to = 3, length.out = 4) 
    ) 

    p1 <- ggplot(data = df.test , aes(x=x_cat, y=count)) + 
      geom_bar(stat="identity") + 
      xlab("X Label") + 
      ylab("Y Label 1") + 
      theme(panel.background = element_rect(colour = "white"), 
       panel.grid.major = element_blank(), 
       panel.grid.minor = element_blank(), 
       legend.position = "bottom") 
    g1 <- ggplotGrob(p1) 

    df.test2 <- melt(df.test[-2]) 
    p2 <- ggplot(data = df.test2 , aes(x=x_cat, y=value, colour=variable)) + 
      geom_line(aes(group=variable)) + 
      ylab("Y Label 2") + 
      theme(panel.background = element_rect(fill = NA, colour = "white"), 
       panel.grid.major = element_blank(), 
       panel.grid.minor = element_blank(), 
       legend.position = "bottom") 
    g2 <- ggplotGrob(p2) 

    pp <- c(subset(g1$layout, name == "panel", se = t:r)) 
    g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t, pp$l, pp$b, pp$l) 

    pp <- c(subset(g2$layout, name == "guide-box", se = t:r)) 
    g <- gtable_add_grob(g, g2$grobs[[which(g2$layout$name == "guide-box")]], t=pp$t, l=pp$l, b=pp$b, r=pp$r) 

    grid.draw(g) 
+0

संयोजन प्लॉट गैर-तुच्छ है। कुछ उदाहरणों के लिए यहां एक नज़र डालें: https://www.stat.auckland.ac.nz/~paul/RGraphics/chapter3.html –

+0

मैंने इस दृष्टिकोण का सफलतापूर्वक उपयोग किया है: http://www.cookbook-r.com/ग्राफ़/एकाधिक_ग्राफ_ऑन_ऑन_पृष्ठ_ (ggplot2)/ –

+0

आपको यह साइट भी सहायक हो सकती है: http://r-statistics.co/ggplot2-cheatsheet.html#Change%20legend%20position – NajlaBioinfo

उत्तर

2

आप डॉन ' टी को दो अलग-अलग भूखंडों को गठबंधन करने की आवश्यकता नहीं है। Ggplot दृष्टिकोण यह एक परत के रूप में दो परतों, एक बार परत और एक रेखा परत के साथ सोचने के लिए है। इसलिए हमें यह समझने की जरूरत है कि उन परतों को एक ही साजिश पर कैसे रखा जाए। उदाहरण के लिए:

library(ggplot2) 
library(reshape2) 

df.test <- data.frame(
    x_cat = factor(c(1, 2, 3, 4)), 
    count = seq(1:4), 
    line1 = seq(from = 1, to = 4, length.out = 4), 
    line2 = seq(from = 0, to = 3, length.out = 4) 
) 

df.test2 = melt(df.test, id.var=c("x_cat", "count")) 

ggplot() + 
    geom_bar(data=subset(df.test2, variable=="line1"), aes(x=x_cat, y=count), 
      stat="identity") + 
    geom_line(data=df.test2, aes(x=x_cat, y=value, colour=variable, group=variable)) + 
    xlab("X Label") + 
    ylab("Y Label 1") + 
    theme(panel.background = element_rect(colour = "white"), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     legend.position = "top") 

enter image description here

यह पता चला कि हम किसी भी कथा जिमनास्टिक यहाँ जरूरत नहीं थी। हालांकि, अगर आपको कभी भी एक एकल किंवदंती, here, here, और here के साथ अलग-अलग भूखंडों को गठबंधन करने की आवश्यकता है, तो कुछ उदाहरण हैं।

+0

उदाहरणों के लिए धन्यवाद। कारण मैं दो अलग-अलग भूखंडों को जोड़ना चाहता था क्योंकि मैं अंततः बाएं और दाएं वाई-अक्ष दोनों का उपयोग करना चाहता था। तो बार ग्राफ बाईं ओर वाई-मानों पर मैप करेंगे, और रेखाएं दाईं ओर वाई-मानों पर मैप करेंगी। (मैंने आकार को नीचे रखने की कोशिश करने के लिए अपने मूल पोस्ट से उस कोड को छोड़ दिया) मुझे आश्चर्य है कि क्या मैं आपके किसी एक लिंक का अनुसरण कर सकता हूं और पौराणिक कथाओं को पी 2 प्लॉट से ग्रोब के रूप में निकाल सकता हूं, फिर grid.arrange() पर उपयोग करें संयुक्त साजिश और किंवदंती वापस में जोड़ें? – Boost

+0

हां, आप ठीक वैसे ही कर सकते हैं जैसा आप वर्णन करते हैं। – eipi10