2012-11-30 21 views
5

अगर मैं एक नेस्टेड होते हैं, जो इस मामले में मैं कई "परिवार" का स्तर है कि कारक "आदेश" में निहित हैं, मैं इसके बजाय आप संभावित एकggplot2 के साथ नेस्टेड पहलू साजिश

facet_grid(Family/Order ~.) 

बनाना चाहेंगे वर्तमान

facet_grid(Family + Order ~.) 

मूल रूप से - प्रत्येक आदेश के लिए एक पट्टी - जिसमें उसके आगे के प्रत्येक आदेश के लिए उस आदेश के अंदर सभी स्ट्रिप्स शामिल हैं। मुझे पता है कि facet_grid (परिवार/आदेश ~) वर्तमान में संभव नहीं है, लेकिन मैं इस प्रभाव को कैसे प्राप्त करूं? क्या यह थीम() के साथ किया जा सकता है? बहुत बहुत धन्यवाद। - एसबी

मुझे ऊपर निर्दिष्ट होना चाहिए कि परिवार और आदेश दोनों कारक हैं। डेटा मान बी प्रजातियों द्वारा हैं जिनके पास पारिवारिक स्तर और आदेश स्तर होता है।

p <- ggplot(models, aes(B,Species)) + geom_point() + facet_grid(Family + Order ~ 
.,scales="free",space="free") 

यहाँ कुछ नमूना डेटा है::

structure(list(Species = c("Acanthocyclops robustus", "Acroperus harpae", 
"Alona affinis", "Ascaphus truei", "Bosmina longirostris"), Intercept = c(-36.1182388331068, 
-27.2140776216155, -25.7920464721491, -39.2233884219763, -31.4301301084581 
), B = c(0.919397836908493, 0.716601987210452, 0.685455190113372, 
1.04159758611351, 0.81077051300147), Bconf = c(0.407917065756464, 
0.181611850119198, 0.254101713856315, 0.708582768458448, 0.234313394549538 
), Order = c("Cyclopoida", "Diplostraca", "Diplostraca", "Anura", 
"Diplostraca"), Family = c("Cyclopidae", "Chydoridae", "Chydoridae", 
"Leiopelmatidae", "Bosminidae")), .Names = c("Species", "Intercept", 
"B", "Bconf", "Order", "Family"), row.names = c(NA, 5L), class = "data.frame") 
+2

आप एक उदाहरण के रूप में इस के साथ कुछ कोड पोस्ट करना चाहिए। जिस तरह से आप इसका वर्णन करते हैं, यह देखना मुश्किल है कि कैसे facet_grid (ऑर्डर ~ फैमिली) 'आपको वह आउटपुट नहीं देगा जो आप चाहते हैं। – emhart

+0

मैंने ऊपर अधिक जानकारी पोस्ट की है। धन्यवाद। – user1536207

+2

कृपया एक उदाहरण डेटासेट प्रदान करें। अपने डेटा की संरचना के बारे में कुछ जानकारी के बिना अपने प्रश्न का उत्तर देना संभव नहीं है। –

उत्तर

0

facet_grid या facet_wrap का प्रयोग ग्राफिक आप बनाने की कोशिश कर रहे हैं का निर्माण नहीं होगा यहाँ मेरी साजिश के लिए कोड है। हालांकि, आप ग्राफिक्स की एक सूची बना सकते हैं और फिर उन्हें gridEtrax::grid.arrange के माध्यम से प्लॉट कर सकते हैं। यहाँ एक उदाहरण

library(ggplot2) 
library(gridExtra) 
library(dplyr) 

dat <- 
    structure(list(Species = c("Acanthocyclops robustus", "Acroperus harpae", 
    "Alona affinis", "Ascaphus truei", "Bosmina longirostris"), Intercept = c(-36.1182388331068, 
    -27.2140776216155, -25.7920464721491, -39.2233884219763, -31.4301301084581 
), B = c(0.919397836908493, 0.716601987210452, 0.685455190113372, 
    1.04159758611351, 0.81077051300147), Bconf = c(0.407917065756464, 
    0.181611850119198, 0.254101713856315, 0.708582768458448, 0.234313394549538 
), Order = c("Cyclopoida", "Diplostraca", "Diplostraca", "Anura", 
    "Diplostraca"), Family = c("Cyclopidae", "Chydoridae", "Chydoridae", 
    "Leiopelmatidae", "Bosminidae")), .Names = c("Species", "Intercept", 
    "B", "Bconf", "Order", "Family"), row.names = c(NA, 5L), class = "data.frame") 

dat 

# A ggplot object with NO data. Omit the order from the facet_grid call 
g <- 
    ggplot() + 
    aes(Species, B) + 
    geom_point() + 
    facet_grid(. ~ Family, 
      scales = "free", space = "free") + 
    ylim(range(dat$B)) + 
    xlab("") 

# Build a seperate graphic for each Order and title 
plots <- 
    lapply(unique(dat$Order), function(o) { 
      g %+% dplyr::filter_(dat, ~ Order == o) + ggtitle(o) 
      }) 

# build as Grobs and plot via gridExtra::grid.arrange 
plots %>% 
    lapply(ggplotGrob) %>% 
    arrangeGrob(grobs = .) %>% 
    grid.arrange(., ncol = 1) 

enter image description here

0

यहाँ है एक सरल उपाय है: अपने डेटा है कि आंतरिक कारक ऐसी है कि interaction(foo, outer)inner के रूप में एक ही स्तर सेट का स्तर गिर करने के लिए एक चर foo जोड़ें। मुझे पता है कि मुझे कुछ लेबल याद आ रहे हैं, इसलिए अगर कोई लेबल भरने का एक त्वरित तरीका समझ सकता है तो मैं इसे अपने उत्तर में संपादित कर दूंगा।

library(ggplot2) 
library(gridExtra) 
library(dplyr) 

dat <- 
    structure(list(Species = c("Acanthocyclops robustus", "Acroperus harpae", 
          "Alona affinis", "Ascaphus truei", "Bosmina longirostris"), 
       Intercept = c(-36.1182388331068, -27.2140776216155, -25.7920464721491, 
           -39.2233884219763, -31.4301301084581), 
       B = c(0.919397836908493, 0.716601987210452, 0.685455190113372, 
          1.04159758611351, 0.81077051300147), 
       Bconf = c(0.407917065756464, 
          0.181611850119198, 0.254101713856315, 0.708582768458448, 0.234313394549538 
         ), 
       Order = c("Cyclopoida", "Diplostraca", "Diplostraca", "Anura", 
          "Diplostraca"), 
       Family = c("Cyclopidae", "Chydoridae", "Chydoridae", 
          "Leiopelmatidae", "Bosminidae")), 
      .Names = c("Species", "Intercept", 
         "B", "Bconf", "Order", "Family"), row.names = c(NA, 5L), class = "data.frame") 

replace_with_int_rank = function (x) as.numeric(as.factor(x)) 
collapse_nested_factor = function(inner, outer){ 
    ave(as.character(inner), outer, FUN = replace_with_int_rank) 
} 
dat$Family_collapsed = collapse_nested_factor(inner = dat$Family, dat$Order) 
p <- ggplot(dat) + geom_point(aes(B,Species)) + facet_grid(Order~Family_collapsed, scales = "free") 

Nested ggplot faceting

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