2017-05-02 6 views
0

다음 코드가 있습니다. 데이터 세트가 78 개의 스택 막대가됩니다. ggplot은 그래프 당 8 개의 막대를 뚫을 수있는 방법이 있습니까? 루프를 통해 데이터 프레임을 분할 할 수 있지만 꽤 비효율적 인 것 같습니다. 당신이 어떤 샘플 데이터를 제공하지 않았기 때문에ggplot 큰 x 축 데이터 세트의 다중 스택 가로 막 대형 차트

TTM <- read.csv("c:/temp/out.csv", header=TRUE) 

library(ggplot2) 

ggplot(data = TTM, aes(x = MTF, y = FTE, fill = Job)) +  
geom_bar(stat="identity") 
+3

왜'group' 변수를 만들고 패싯에 사용합니까? –

답변

1

, 나는이 데이터 세트 mtcars 내장 사용합니다. 위의 내 의견을 확대하면 원하는 그룹 수를 가진 새 그룹 변수를 만들 수 있습니다. 이 사용하면 1 ~ 3 일의 수행 할 수 있습니다 (1) Facet_wrap, (2) grid.arrange, 또는 (3) 새로운 페이지

데이터 설정 :

group.len <- 8 
map <- data.frame(hp = unique(mtcars$hp), 
        new_group = rep(1:ceiling(length(unique(mtcars$hp))/group.len), each = group.len, 
            length.out = length(unique(mtcars$hp)))) 

df <- merge(mtcars, map) 

패싯 랩 :

ggplot(data = df, aes(x = cyl, y = mpg, fill = as.factor(hp))) +  
    geom_bar(stat="identity") + facet_wrap(~new_group) 

enter image description here

Grid.arrange :

내가이 게시물 place a legend for each facet_wrap grid in ggplot2에서와 똑같은 방식을 사용합니다. 원래는 각면에 대해 서로 다른 전설을 얻기에 관하여이었다, 그러나 나는 또한 당신의 문제에 매우 적용 생각 :

library(gridExtra) 
out <- by(data = df, INDICES = df$new_group, FUN = function(m) { 
    m <- droplevels(m) 
    m <- ggplot(m, aes(as.factor(cyl), mpg, fill = as.factor(hp))) + 
    geom_bar(stat="identity") 
}) 
do.call(grid.arrange, out) 

enter image description here 새로운 페이지 :

참고이 그리드에서 out 개체를 사용합니다.을 준비하십시오. 이것은 각 페이지를 새로운 페이지에 넣을 것입니다. (grid.arrange과 같은 것입니다.)

lapply(out, function(x) {x})