Remove geom(s) from an existing ggplot chart?

前端 未结 4 445
情深已故
情深已故 2020-12-15 21:28

I am trying to understand how I can make changes to the internals of a ggplot2 chart. I started reading the few ressources I could find about ggplot_built and <

4条回答
  •  不知归路
    2020-12-15 21:39

    You can access / manipulate g's elements the way you would do with other R object.

    g$layers
    #[[1]]
    #geom_point: na.rm = FALSE
    #stat_identity: na.rm = FALSE
    #position_identity 
    
    #[[2]]
    #mapping: label = Sepal.Width 
    #geom_text: parse = FALSE, check_overlap = FALSE, na.rm = FALSE
    #stat_identity: na.rm = FALSE
    #position_identity 
    

    Remove geom_text:

    g$layers[[2]] <- NULL
    

    Remove all layers

    g$layers <- NULL
    g
    


    The gginnards package offers some functions to manipulate ggplot layers, see the vignette User Guide: 4 Manipulation of plot layers for details.


    edit

    Following the question of How can I extract plot axes' ranges for a ggplot2 object? I came to a solution that uses ggplot_build and ggplot_gtable. The idea is simply to copy the layout parameters taken from ggplot_built(p) to the new plot, for which we deleted a layer.

    # create a copy of p
    p_new <- p
    
    # delete the first layer
    p_new$layers[[1]] <- NULL
    p_new_build <- ggplot_build(p_new)
    
    # this is the important line
    p_new_build$layout$panel_params <- ggplot_build(p)$layout$panel_params
    
    library(gridExtra)
    grid.arrange(p, ggplot_gtable(p_new_build), ncol = 2)
    

提交回复
热议问题