我希望能够以编程方式为我的情节的最顶部分配一条绿线。
下面我在一个例子中展示了我想要什么,除了线在最底部,而不是顶部。理想情况下,我会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))
Run Code Online (Sandbox Code Playgroud)
您可以通过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))
Run Code Online (Sandbox Code Playgroud)
此外,annotate如果您想以编程方式分配线,您可以将调用保存在一个变量中,然后简单地将其添加到绘图中。