Bạn đánh bại tôi vào nó RHA, tôi đã viết gần một mã giống hệt với mã của bạn trước khi tôi thấy bài đăng của bạn. Nhưng dù sao, cảm ơn!
Tôi cũng muốn loại bỏ "2014" và "2015" từ các hộp màu xám (mà tôi không nêu trong bài viết đầu tiên của tôi), vì vậy tôi đã phải thực hiện một số thay đổi nhiều hơn nữa.
Với một số cảm hứng từ here, here, và here, tôi đã đưa ra như sau (thực sự xấu xí) mã:
data14 <- rnorm(10)
data15 <- rnorm(10, mean = 500)
A1 <- data.frame("Y"=data14, "X"=1:10, "Q"=1, "year"=2014)
A2 <- data.frame("Y"=data14, "X"=1:10, "Q"=2, "year"=2014)
A3 <- data.frame("Y"=data14, "X"=1:10, "Q"=3, "year"=2014)
A4 <- data.frame("Y"=data14, "X"=1:10, "Q"=4, "year"=2014)
N1 <- data.frame("Y"=data15, "X"=1:10, "Q"=1, "year"=2015)
N2 <- data.frame("Y"=data15, "X"=1:10, "Q"=2, "year"=2015)
N3 <- data.frame("Y"=data15, "X"=1:10, "Q"=3, "year"=2015)
N4 <- data.frame("Y"=data15, "X"=1:10, "Q"=4, "year"=2015)
A <- rbind(A1, A2, A3, A4)
N <- rbind(N1, N2, N3, N4)
tmp <- data.frame(rbind(A, N))
Sau đó, tôi đã thực hiện một chức năng đơn giản đặt tên các biến một cách chính xác
labFunc <- function(data, var1, var2, names) {
data$id <- NA
loop <- length(levels(factor(data[[var2]])))
for (i in 1:loop) {
data[data[[var1]] == 2014 & data[[var2]] == levels(factor(data[[var2]]))[i], "id"] <- names[i]
data[data[[var1]] == 2015 & data[[var2]] == levels(factor(data[[var2]]))[i], "id"] <- paste(names[i], "")
}
first <- levels(factor(data$id))[seq(from=1, to = length(levels(factor(data$id))), by = 2)]
second <- levels(factor(data$id))[seq(from=2, to = length(levels(factor(data$id))), by = 2)]
data$id <- factor(data$id, levels=paste(c(first, second)))
return(data)
}
names <- c("Q1", "Q2", "Q3", "Q4")
data <- labFunc(tmp, "year", "Q", names)
Tạo cốt truyện:
p <-ggplot(data, aes(y = Y, x = X)) +
geom_line() +
facet_wrap(~ id , ncol = 4, scales = "free")
Và cuối cùng thêm các nhãn lớn
z <- ggplotGrob(p)
# New strip at the top
z <- gtable_add_rows(z, unit(1, "lines"), pos = 0) # New row added to top
z <- gtable_add_rows(z, unit(1, "lines"), pos = 6) # New row added to top
#z <- gtable_add_rows(z, unit(9, "lines"), pos = 0) # New row added to top
# Check the layout
gtable_show_layout(z) # New strip goes into row 2
# New strip spans columns 4 to 8
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = NA, fill = grey(0.8), size = .5)),
textGrob("2014", vjust = .27,
gp = gpar(cex = .75, fontface = 'bold', col = "black"))), 2, 4, 2, 14, name = c("a", "b"))
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = NA, fill = grey(0.8), size = .5)),
textGrob("2015", vjust = .27,
gp = gpar(cex = .75, fontface = 'bold', col = "black"))), 7, 4, 7, 14, name = c("a", "b"))
# Add small gap between strips - below row 2
z <- gtable_add_rows(z, unit(2/10, "lines"), 2)
z <- gtable_add_rows(z, unit(5/10, "lines"), 7)
# Draw it
grid.newpage()
grid.draw(z)
Đây là một chút phức tạp hơn so với tôi nghĩ, nhưng cảm ơn tất cả các bạn đã giúp đỡ!
Có thể thấy [ở đây] (http://stackoverflow.com/questions/11724311/how-to-add-a-ggplot2-subtitle-with-different-size-and-colour) – MichaelChirico
[This] (http: //stackoverflow.com/questions/22818061/annotating-facet-title-as-strip-over-facet/22825447#22825447) có thể giúp đỡ, hoặc [này] (http://stackoverflow.com/questions/29311772/ggplot2- phức tạp hơn-faceting/29323739 # 29323739). –