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