. , var2 var1. ( ) . , , - , , . , .
library(ggplot2)
library(gtable)
library(grid)
set.seed(1234)
data <- data.frame(val = c(2,4,5,6,7,8,9),
var1 = c("A","A","A","B","B","C","C"),
var2 = sample(LETTERS[1:7]))
data$var2 = factor(data$var2, labels = data$var2, levels = data$var2)
p = ggplot(data, aes(x = factor(var1), y = val, fill = var2)) +
geom_bar(stat = "identity")
g = ggplotGrob(p)
leg = g$grobs[[which(g$layout$name == "guide-box")]]$grobs[[1]]
gt = ggplot_build(p)
labels = rev(gt$layout$panel_ranges[[1]]$x.labels)
gt$data[[1]]$x
N = as.vector(table(gt$data[[1]]$x))
N = N[-length(N)]
pos = rev(cumsum(N)) + 3
pos = c(pos, 3)
for(i in seq_along(pos)){
leg = gtable_add_rows(leg, unit(1.5, "lines"), pos = pos[i])
leg = gtable_add_grob(leg, textGrob(labels[i], y = 0.1, just = "bottom"),
t = pos[i] + 1, l = 2)
}
g$grobs[[which(g$layout$name == "guide-box")]]$grobs[[1]] = leg
grid.newpage()
grid.draw(g)
