您可以尝试这样的事情,而不必使用网格来修改底层对象。
首先我们得到major/minor的坐标
ymajor = ggplot_build(p)$layout$panel_params[[1]]$y.major_source
yminor = ggplot_build(p)$layout$panel_params[[1]]$y.minor_source
yminor = setdiff(yminor,ymajor)
ymajor_cols = ifelse(ymajor == 15000,"transparent","white")
yminor_cols = ifelse(yminor == 12500,"transparent","white")
然后我们通过指定添加到您的情节中
ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point()+
theme(panel.grid.major.y = element_line(colour = ymajor_cols),
panel.grid.minor.y = element_line(colour = yminor_cols))
我实际上更喜欢指定主要和次要中断并在图中指定它们,下面的代码给出了相同的结果:
ymajor = c(0,5000,10000,15000)
yminor = c(0,2500,12500,17500)
ymajor_cols = ifelse(ymajor == 15000,"transparent","white")
yminor_cols = ifelse(yminor == 12500,"transparent","white")
ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point()+
scale_y_continuous(breaks=ymajor,minor_breaks = yminor)+
theme(panel.grid.major.y = element_line(colour = ymajor_cols),
panel.grid.minor.y = element_line(colour = yminor_cols))