我有以下代码
d <- data.frame(a = c("a", "b", "a", "b"), b = c("c", "c", "d", "d"), y = c(4, 5, 3, 2))
ggplot(data = d, aes(x = a, y = y, fill = b)) +
geom_col(position = position_dodge(0.9)) +
annotate("segment", x = "a", xend = "a", y = 5, yend = 4, arrow = arrow())我得到的信息如下:

我想要的是有一个箭头指向一个水泥杆。我可能想要有多个箭头。例如:

问题是我不知道如何在x轴上处理混凝土钢筋,即哪些是单个闪避钢筋的x值。
发布于 2018-08-14 01:15:39
您可以通过一个数字来引用a和b的位置,从1开始。这里,a将为1,b将为2。该数字与级别的位置相对应(参见levels(d$a))。
要添加多个注释,可以添加多个annotate元素,也可以使用x/xend/y/yend位置的向量。
因此,在您的情况下,以下内容应该可以很好地工作:
dodge <- 0.9
ggplot(data = d, aes(x = a, y = y, fill = b)) +
geom_col(position = position_dodge(dodge)) +
annotate("segment", x = 1, xend = 1 - dodge/4, y = 5, yend = 4, arrow = arrow()) +
annotate("segment", x = 1 + dodge/4, xend = 1 + dodge/4, y = 4, yend = 3, arrow = arrow())或者使用向量:
dodge <- 0.9
ggplot(data = d, aes(x = a, y = y, fill = b)) +
geom_col(position = position_dodge(dodge)) +
annotate("segment", x = c(1, 1 + dodge/4),
xend = c(1 - dodge/4, 1 + dodge/4),
y = c(5, 4),
yend = c(4, 3), arrow = arrow())当然,您可以对annotate元素的数据使用data.frame,就像对任何geom_*元素所做的那样。

发布于 2018-08-14 01:09:16
data.frame(a=c("a", "b", "a", "b"), b=c("c", "c", "d", "d"), y=c(4, 5, 3, 2)) %>%
ggplot(aes(x=a, y=y, fill=b)) +
geom_col(position=position_dodge(0.9)) +
annotate("segment", x=1, xend=.7, y = 5, yend=4.1, arrow=arrow()) +
annotate("segment", x=1.2, xend=1.2, y = 4, yend=3.1, arrow=arrow())

https://stackoverflow.com/questions/51827135
复制相似问题