【问题标题】:Removing an arbitrary gridline but maintaining respective tick mark in ggplot2删除任意网格线但在 ggplot2 中保持相应的刻度线
【发布时间】:2020-02-06 08:56:12
【问题描述】:

假设我有一个由这段代码生成的图:

library(ggplot2); ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point()

我想删除任意水平(或垂直)网格线,可能是 v = 12500 或 v = 15000(或两者)。另外,我想保留相应的刻度线。有没有相对简单的方法来做到这一点?

为了清楚起见,我不想get rid of all minor gridlines,尤其是all the gridlines

【问题讨论】:

    标签: r ggplot2 gridlines


    【解决方案1】:

    您可以尝试这样的事情,而不必使用网格来修改底层对象。

    首先我们得到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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2015-08-02
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多