如何使用ggplot自定义分面图的背景颜色

3

我希望能够单独控制分面绘图中面板和图形的背景颜色。在这个答案中,使用提示,我创建了一个几乎可以工作的东西,但仍有两个问题:

  1. 颜色不能按我定义的那样显示 - 颜色在单元格上显示不同,但看起来颜色很奇怪-好像它们是一些叠加的颜色
  2. 我无法分别控制面板和绘图的背景颜色

这是目前我的代码:

ann_text <- data.frame(mpg = c(22, 15, 30), 
                       wt = c(4, 5, 2), 
                       cyl = factor(c(4, 6, 8), levels = c("4","6","8")),
                       lab = c("Text 1", "Text 2", "Text 3"),
                       hue = c("pink", "yellow", "lightblue"))
 
ggplot(mtcars, aes(mpg, wt)) +
  geom_rect(data = ann_text, aes(fill = hue),
            xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, alpha = 0.3) +
  geom_text(data = ann_text, mapping = aes(x = mpg, y = wt, label = lab)) +
  theme(panel.background = element_blank(),
        panel.grid.major.y = element_line(color = "grey")) +
  facet_grid(. ~ cyl) +
  geom_point()

我的代码运行结果颜色很奇怪

我本想在theme()中使用下面这一行代码,但是当然(?!)它没有起作用:

plot.background = element_rect(data = ann_text, mapping = aes(fill = hue))

你有什么想法可以让我指定面板和图形的背景颜色吗?

1个回答

0
使用 scale_fill_identity
ggplot(mtcars, aes(mpg, wt)) +
  geom_rect(data = ann_text, aes(fill = hue),
            xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, alpha = 0.3) +
  geom_text(data = ann_text, mapping = aes(x = mpg, y = wt, label = lab)) +
  theme(panel.background = element_blank(),
        panel.grid.major.y = element_line(color = "grey")) +
  facet_grid(. ~ cyl) +
  geom_point() +
  scale_fill_identity()

enter image description here

或者,你可以用I标签包装美学元素

ggplot(mtcars, aes(mpg, wt)) +
  geom_rect(data = ann_text, aes(fill = I(hue)),
            xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, alpha = 0.3) +
  geom_text(data = ann_text, mapping = aes(x = mpg, y = wt, label = lab)) +
  theme(panel.background = element_blank(),
        panel.grid.major.y = element_line(color = "grey")) +
  facet_grid(. ~ cyl) +
  geom_point()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接