2012-12-13 10 views
8

का उपयोग करते समय geom_bar को पुन: व्यवस्थित करते हुए मैं जो हासिल करने का प्रयास करता हूं वह प्रति पैनल एक दिए गए चर द्वारा क्रमबद्ध बार होता है।facet_wrap

एक साधारण उदाहरण:

library(ggplot2) 
    library(plyr) 

    df <- data.frame(fac = c("a", "b", "c", "e", "b", "c", "d"),    
        val = c(1, 2, 7, 4, 5, 3, 1), 
        group = c(1, 1, 1, 1, 2, 2, 2)) 

    p1 <- ggplot(df, aes(x = fac, y = val)) + geom_bar() + facet_wrap(~ group, scales = "free") + coord_flip() 
    p1 

    p2 <- ggplot(df, aes(x = reorder(fac, val), y = val)) + geom_bar() + facet_wrap(~ group, scales = "free") + coord_flip() 
    p2 

p2 का उत्पादन नहीं करता कि मैं क्या चाहते हैं, क्योंकि हर "कारक स्तर" सभी पैनलों में प्रकट होता है। क्या इस समस्या के लिए पहले से ही एक सरल समाधान है?

मुझे मिला एक समाधान निम्नलिखित है (प्रति समूह प्रत्येक कारक स्तर के लिए रैंक की गणना करता है)।

df2 <- ddply(df, .(group), transform, fac2 = rank(val)) 
df2$fac2 <- factor(df2$fac2) 
p3 <- ggplot(df2, aes(x = fac2, y = val)) + facet_wrap(~ group, scales = "free") + geom_bar(stat = "identity") + coord_flip() + 
    opts(panel.margin = unit(2, "lines")) 
p3 

मुझे अपने स्वयं के द्वारा लेबल सेट करना होगा। एक संभावित समाधान निम्नलिखित है (इस उदाहरण के लिए हार्ड कोड):

grid.newpage() 
grob <- ggplotGrob(p3) 
object.path <- grid.ls(getGrob(grob, "axis.text.y", grep = TRUE, global = TRUE), print = FALSE)$name 
grob <- grid::editGrob(grob, object.path[1], label = c("ABDQ", "M", "A", "B")) 
grob <- grid::editGrob(grob, object.path[2], label = c("A", "B", "EEEEX")) 
grid.draw(grob) 

लेकिन एक और समस्या है। मुझे अब अपने पैनल द्वारा पैनल.मार्गिन सेट करना होगा और ऐसा करना संभव नहीं है क्योंकि मैं केवल "ग्लोबल" पैनल सेट करने में सक्षम हूं। मार्जिन और मुझे जो चाहिए वह सभी 4 पक्षों के लिए है (या पर कम से कम 2)।

प्रश्न 1: क्या पुनरावृत्ति का उपयोग करके कोई आसान समाधान है?

प्रश्न 2: क्या आवश्यक अक्ष प्राप्त करने के लिए scale_x_discrete का उपयोग कर कोई समाधान है?

प्रश्न 3: मैं पैनल के लिए व्यूपोर्ट्स में हेरफेर करने के लिए आवश्यक ग्रिड ऑब्जेक्ट नहीं ढूंढ पा रहा था। मार्जिन। उचित ग्रिड ऑब्जेक्ट में हेरफेर करने का कोई आसान तरीका है?

कोई विचार?

उत्तर

3

मुझे लगता है कि grid.arrange एक faceting ढांचे में मुक्त तराजू जूता पहनने का साधन करने की कोशिश कर की तुलना में इस के लिए एक बहुत अच्छा उपकरण है:

library(gridExtra) 
q1 <- ggplot(subset(df,group == 1),aes(x = reorder(fac,val),y = val)) + 
     geom_bar() + 
     facet_wrap(~group) + 
     coord_flip() 

q2 <- q1 %+% subset(df,group == 2) 

grid.arrange(q1,q2,nrow = 1) 

enter image description here

+0

धन्यवाद एक बहुत! मैं grid.arrange के बारे में पता नहीं था। – user1901670

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