ggplot用于大型x轴数据集的多个堆积条形图

时间:2017-05-02 18:51:58

标签: r ggplot2 stacked-chart

我有以下代码 - 数据集导致78个堆叠条形。 ggplot有没有办法打破,比如每个图表8个条形图?我可以通过循环分解数据帧,但这似乎效率很低。

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")

1 个答案:

答案 0 :(得分:1)

由于您未提供任何样本数据,我将使用内置数据集mtcars。扩展我上面的评论,您可以创建一个具有所需组数的新组变量。使用它你可以做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)

Facet wrap:

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 新页面:

请注意,它使用 grid.arrange 中的out对象。这会将每个绘图放在一个新页面上(而不是像grid.arrange一样在一个页面上。

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