在“ geom_segment”的末尾添加箭头,而不是指向“ ggplot2”中“ geom_segment”的末尾?

时间:2019-04-24 11:25:14

标签: r ggplot2

是否有可能在geom_segment的末尾添加箭头,而不是使箭头指向{{的末尾 1}}在geom_segment中?


一个例子:

  • 箭头是您自然得到的:箭头 指向ggplot2的结尾(或:箭头指向geom_segment);
  • 我想要的是底部箭头:箭头x = 1的结尾开始并指向(或者:箭头从geom_segment开始)。

enter image description here


我到目前为止所做的:

生成上面图的代码是手动调整的,并且仅适用于给定的图大小:

x = 1

使用另一个绘图大小,代码会产生与我不想要的不同的东西:

enter image description here

因此,我正在ggplot() + geom_segment(aes(x = 0, y = 1, xend = 1, yend = 1), arrow = arrow()) + geom_segment(aes(x = 0, y = 0, xend = 1.05, yend = 0), arrow = arrow()) + ylim(-1, 2) 内寻找一个选项(我没有找到有用的东西,因为arrow()是默认值,并产生与上述相同的图。)或替代ends = "last"。在geom_内部。

有任何提示吗?


@mnm中的评论不符合我的搜索要求

arrow()

enter image description here

1 个答案:

答案 0 :(得分:1)

我不知道如何使用geom_segment本地执行此操作,但是您可以创建一个函数来帮助执行此操作。它修改结束坐标以扩展长度,达到arrow_length项指定的长度。

geom_segment_extra <- function(x, y, xend, yend, arrow_length) {
  angle = atan2(yend - y, xend - x)  # Trig reminder from https://stackoverflow.com/a/34617867/6851825
  xend = xend + arrow_length * cos(angle)
  yend = yend + arrow_length * sin(angle)

  list(    # ggplot accepts list objects as new layers
    geom_segment(aes(x = x, y = y, xend = xend, yend = yend), arrow = arrow()) 
  )
}

然后我们可以使用它。请注意,第一个geom_segment_extra只是重复正常的片段外观,而添加arrow_length = 0.1则将其扩展0.1个单位:

ggplot() +
  geom_segment(aes(x = 0, y = 1, xend = 1, yend = 1), arrow = arrow()) + 
  geom_segment_extra(0, 0.9, 1, 0.9, arrow_length = 0) +
  geom_segment_extra(0, 0.8, 1, 0.8, arrow_length = 0.1) +
  scale_x_continuous(breaks = 0.2*0:100)

enter image description here