2017-09-16 2866 views
1

我希望能够以编程方式将绿线分配到我的图的最上方。如何在ggplot2的顶部面板边框添加线

下面我在示例中演示了我想要的内容,除了该行在底部而非顶部。理想情况下,我会以类似的方式在theme中完成此操作。

我试图用panel.border自己完成顶部线条,但它需要element_rect作为参数,这意味着绘图的其他边也会得到绿线。

尽管最好使用theme,但我愿意使用geom_hline或其他任何东西。当试图用geom_hline实现解决方案时,我遇到了麻烦,确定由ggplot计算的y轴的最大值,以便干净地将线条放在同一位置,而不管从图形到图形的比例变化。根据我的实际数据,y轴的比例变化很大,并且从不同的绘图到绘图有不同的测量单位。

library(tidyverse) 
data(mtcars) 

mtcars %>% 
    ggplot(aes(x= mpg, y= disp)) + 
    geom_point() + 
    theme(axis.line.x= element_line("green", size= 2)) 

greenline

回答

1

您可以用annotate,并巧妙地利用Inf值的做到这一点。请注意,因为annotate正在绘制在绘图内部,而不是绘制在绘图外部的轴线上,所以需要一条双倍厚度的线以匹配您使用theme所做的操作。使用Inf值可确保将线放置在绘图顶部,而不考虑其单位的比例。

library(tidyverse) 
data(mtcars) 

mtcars %>% 
    ggplot(aes(x= mpg, y= disp)) + 
    geom_point() + 
    annotate(geom = 'segment', y = Inf, yend = Inf, color = 'green', x = -Inf, xend = Inf, size = 4) + 
    theme(axis.line.x= element_line("green", size= 2)) 

enter image description here

此外,你可以节省调用annotate在一个变量,然后只需添加这地块后,如果你想以编程方式分配行。

+0

这真的太棒了,谢谢! – Scott

相关问题