我正在尝试使用ggplot2::geom_bar背景着色(使用ggplot2::geom_rect())根据分类变量绘制堆叠的条形图,如下所示:
shading <- data.frame(min = seq(from = 0.5, to = max(as.numeric(as.factor(diamonds$clarity))), by = 1),
max = seq(from = 1.5, to = max(as.numeric(as.factor(diamonds$clarity))) + 0.5, by = 1),
col = c(0,1))
ggplot() +
theme(panel.background = element_rect(fill = "transparent")) +
geom_bar(data = diamonds, mapping = aes(clarity, fill=cut)) +
geom_rect(data = shading,
aes(xmin = min, xmax = max, ymin = -Inf, ymax = Inf,
fill = factor(col), alpha = 0.1)) +
geom_bar(data = diamonds, mapping = aes(clarity, fill=cut)) +
guides(alpha = FALSE)
Run Code Online (Sandbox Code Playgroud)
如何更改阴影的颜色?我试过了scale_fill_manual(values = c("white", "gray53")),但似乎在ggplot2(https://github.com/hadley/ggplot2/issues/578)中无法实现多尺度美学.有没有其他方法可以获得理想的结果?
是的,而不是把你的颜色aes()放在外面,把它们放在外面(所以它们按原样使用).因为它在aes()调用之外你将不得不使用显式fill=shading$col而不是fill=col,并且shading$col应该具有你所追求的颜色名称(而不是将变量解释为因子).
shading$col <- ifelse(shading$col, 'white', 'gray53')
ggplot() +
theme(panel.background = element_rect(fill = "transparent")) +
geom_bar(data = diamonds, mapping = aes(clarity, fill=cut)) +
geom_rect(data = shading,
aes(xmin = min, xmax = max, ymin = -Inf, ymax = Inf, alpha = 0.1),
fill=shading$col) + # <-- here
geom_bar(data = diamonds, mapping = aes(clarity, fill=cut)) +
guides(alpha = FALSE)
Run Code Online (Sandbox Code Playgroud)