如何在ggplot2的顶部面板边框添加线条

时间:2017-09-16 17:54:15

标签: r 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

2 个答案:

答案 0 :(得分: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,然后只需稍后将其添加到绘图中,如果您想以编程方式分配该行。

答案 1 :(得分:1)

ggplot2中一个相对较新的功能是使用辅助轴,该轴可以更直接地解决此问题(而且,imo优雅):

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

gg + scale_x_continuous(sec.axis=sec_axis(~., breaks = NULL))
# Warning in min(x) : no non-missing arguments to min; returning Inf
# Warning in max(x) : no non-missing arguments to max; returning -Inf
# Warning in min(x) : no non-missing arguments to min; returning Inf
# Warning in max(x) : no non-missing arguments to max; returning -Inf

(我还没有弄清楚如何在不影响主轴的情况下防止出现警告。)

ggplot with upper line

如果您想要轴刻度(尽管没有标签),则可以摆脱警告:

gg + scale_x_continuous(sec.axis=sec_axis(~., labels = NULL))

ggplot with upper line with axis ticks, no warnings