Look of arrows in ggplot2 geom_segment()

前端 未结 2 555
时光取名叫无心
时光取名叫无心 2020-12-29 21:32

I\'m trying to make a plot with arrows in ggplot2 looking something like this, which was made using base R grapics. (colors are not important)

2条回答
  •  别那么骄傲
    2020-12-29 22:17

    update: ggplot2 v2.1.0.9001

    If the plot is in your current window you can edit the shape of the arrow directly with

    grid.force()
    # change shape of arrows
    grid.gedit("segments", gp=gpar(linejoin ='mitre'))
    # change the shape in legend also
    grid.gedit("layout", gp=gpar(linejoin ='mitre'))
    

    If the plot is in your current window you can edit the shape of the arrow directly with

    grid.gedit("segments", gp=gpar(linejoin ='mitre'))
    

    ggplot now seems to have changed the legend key to an arrow shape, so if you want to change the shape of these as well, you can do this across the full plot with

    grid.gedit("gTableParent", gp=gpar(linejoin ='mitre'))
    

    original answer

    Not less hacky, but perhaps easier?? You can edit the grobs returned by ggplotGrob.

    If p is your plot:

    g <-  ggplotGrob(p)
    
    idx <- grep("panel", g$layout$name)
    
    nms <- sapply(g$grobs[[idx]]$children[[3]]$children , '[[', "name")
    
    for(i in nms) {
        g$grobs[[idx]]$children[[3]] <- 
                  editGrob(g$grobs[[idx]]$children[[3]], nms[i], 
                            gp=gpar(linejoin ='mitre'), grep=TRUE)
    }
    
    grid.newpage()
    grid.draw(g)
    

    enter image description here

提交回复
热议问题