如何让 cowplot 次要网格线成为标准的 ggplot 默认软灰色,而不是纯黑色

How to get cowplot minor grid lines to be the standard ggplot default soft grey, not solid black

library(tidyverse)
library(cowplot)
p1 <- ggplot(mtcars, aes(factor(cyl))) +
  geom_bar(fill = "#56B4E9", alpha = 0.8) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.05))) +
  theme_minimal_hgrid()
p1

Cowplot v1.0.0 似乎工作正常。看上面。但是,当我尝试向上面的图中添加次要网格线时,事情发生了变化:

p1 + theme(panel.grid.minor.y = element_line())

为什么将网格线绘制为纯黑色而不是柔和的灰色?我知道我可能会指定 color = "lightgrey" 但我不确定 lightgrey 是否是匹配其他所有内容的正确灰色,并且更愿意使用默认值。我错过了什么吗?

发生这种情况是因为您正在使用的主题明确地将 panel.grid.minor 元素设置为 element_blank()。当您随后设置 panel.grid.minor.y 时,它会从空白元素而不是主题的 panel.grid 元素继承其参数。 element_blank() 没有颜色,所以使用默认的黑色。

如果您将 panel.grid.minor 设置为 NULL,则 x 和 y 次网格将从 panel.grid:

继承它们的参数
p1 + theme(panel.grid.minor = NULL)

请注意,如果您使用连续的 x 轴,您还必须设置 panel.grid.minor.x = element_blank() 以避免在这种情况下出现垂直网格线。

reprex package (v0.2.0) 创建于 2019-08-14。

是正确的。但是,请注意 cowplot 提供了一个函数 background_grid() 专门用于简化此操作。您可以通过 majorminor 参数简单地指定您想要的主要和次要行。但是,默认的次要线条比主要线条更细,因此您还必须设置 size.minor = 0.5 以使它们看起来相同。

library(ggplot2)
library(cowplot)
#> 
#> ********************************************************
#> Note: As of version 1.0.0, cowplot does not change the
#>   default ggplot2 theme anymore. To recover the previous
#>   behavior, execute:
#>   theme_set(theme_cowplot())
#> ********************************************************
ggplot(mtcars, aes(factor(cyl))) +
  geom_bar(fill = "#56B4E9", alpha = 0.8) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.05))) +
  theme_minimal_hgrid() +
  background_grid(major = "y", minor = "y", size.minor = 0.5)

reprex package (v0.3.0)

于 2019-08-15 创建