scale_y_log10转换后,背景填充(通过geom_rect)被删除

时间:2018-08-24 15:02:42

标签: r ggplot2

我想向使用分组数据(因子x轴)和对数刻度y轴创建的绘图中添加背景填充。添加对数刻度后,将删除背景填充。

这是一个错误,还是我做错了什么?

可复制的示例数据: 我将使用mtcars数据,但将cyl变量作为一个因素。这是模仿我的数据的最简单的数据集。

library(dplyr)
library(ggplot2)
mtcars_f <- mtcars %>% 
  mutate(cyl.f = factor(cyl)) 

这在正常的y轴刻度上可以正常工作。

mtcars_f %>% 
  ggplot(aes(cyl.f, mpg)) +
  geom_rect(xmin=-Inf, ymin=17.5, xmax=Inf, ymax=22.5) +
  geom_point() 

enter image description here

问题: 但是,在变换y轴时,背景矩形填充将被删除:

mtcars_f %>% 
  ggplot(aes(cyl.f, mpg)) +
  geom_rect(xmin=-Inf, ymin=17.5, xmax=Inf, ymax=22.5) +
  geom_point() +
  scale_y_log10()

enter image description here

请注意:这是与this similarly titled question

不同的问题

编辑答案: @Tung的答案有效!也可以通过将数据作为美观因素传递到geom_rect来解决,并将x轴指定为“离散”

rect_df <- 
  data_frame(xmin=-Inf, ymin=17.5, xmax=Inf, ymax=22.5)
mtcars_f %>% 
  ggplot(aes(cyl.f, mpg)) +
  geom_rect(data = rect_df, aes(xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax), inherit.aes = F) +
  geom_point() +
  scale_y_log10() +
  scale_x_discrete()

1 个答案:

答案 0 :(得分:2)

这是使用annotate的解决方法,直到您找出geom_rect出了什么问题

library(dplyr)
library(ggplot2)

mtcars_f <- mtcars %>% 
  mutate(cyl.f = factor(cyl)) 

mtcars_f %>% 
  ggplot(aes(cyl.f, mpg)) +
  scale_y_log10() +
  scale_x_discrete() +
  annotate(geom = "rect", 
           xmin = -Inf, ymin = 17.5, xmax = Inf, ymax = 22.5,
           fill = "light blue", alpha = 0.8) +
  geom_point() +
  theme_classic(base_size = 12)

reprex package(v0.2.0.9000)于2018-08-24创建。