繁体   English   中英

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

[英]How to add line at top panel border of 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))

绿线

您可以通过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))

在此处输入图片说明

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

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 与上线

如果你想要轴刻度(尽管没有标签),你可以去掉警告:

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

ggplot 带有轴刻度线,没有警告

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM