我有以下代码 - 数据集导致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")
答案 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)
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)
请注意,它使用 grid.arrange 中的out
对象。这会将每个绘图放在一个新页面上(而不是像grid.arrange
一样在一个页面上。
lapply(out, function(x) {x})