2017-05-02 118 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})