我正在尝试在图中绘制两个“ geom_vline()”。
下面的代码对于一条垂直线工作正常:
x=1:7
y=1:7
df1 = data.frame(x=x,y=y)
vertical.lines <- c(2.5)
ggplot(df1,aes(x=x, y=y)) +
  geom_line()+
  geom_vline(aes(xintercept = vertical.lines))
但是,当我通过更改添加第二条所需的垂直线时
vertical.lines <- c(2.5,4),我得到了错误:
´Error: Aesthetics must be either length 1 or the same as the data (7): xintercept´
我该如何解决?
ggplot(df1, aes(x = x, y = y)) +
    geom_line() +
    sapply(vertical.lines, function(xint) geom_vline(aes(xintercept = xint)))
只需aes()在使用时删除+ geom_vline:
ggplot(df1,aes(x=x, y=y)) +
  geom_line()+
  geom_vline(xintercept = vertical.lines)
它不起作用,因为第二个aes()与第一个冲突,这与的语法有关ggplot。aesthetics正如错误告诉您的那样,所有需求都必须具有相同的长度。
您应该将其+geom_vline视为图形的注释层,而不是+geom_points或+geom_line用于将数据映射到绘图的图形。(请参见此处,它们在两个不同的部分中如何显示)。
数据:
x=1:7
y=1:7
df1 = data.frame(x=x,y=y)
vertical.lines <- c(2.5,4)