我希望能够以编程方式将绿线分配到我的情节的最顶部。
下面我在一个例子中展示我想要的东西,除了线在最底部,而不是顶部。理想情况下,我会以类似的方式在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))
答案 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))
此外,您可以将调用保存到变量中的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
(我还没有弄清楚如何在不影响主轴的情况下防止出现警告。)
如果您想要轴刻度(尽管没有标签),则可以摆脱警告:
gg + scale_x_continuous(sec.axis=sec_axis(~., labels = NULL))