[英]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
(我还没有想出如何在不影响主轴的情况下防止警告。)
如果你想要轴刻度(尽管没有标签),你可以去掉警告:
gg + scale_x_continuous(sec.axis=sec_axis(~., labels = NULL))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.