我不知道代码中缺少什么?
set.seed(12345)
require(ggplot2)
AData <- data.frame(Glabel=LETTERS[1:7], A=rnorm(7, mean = 0, sd = 1), B=rnorm(7, mean = 0, sd = 1))
TData <- data.frame(Tlabel=LETTERS[11:20], A=rnorm(10, mean = 0, sd = 1), B=rnorm(10, mean = 0, sd = 1))
i <- 2
j <- 3
p <- ggplot(data=AData, aes(AData[, i], AData[, j])) + geom_point() + theme_bw()
p <- p + geom_text(aes(data=AData, label=Glabel), size=3, vjust=1.25, colour="black")
p <- p + geom_segment(data = TData, aes(xend = TData[ ,i], yend=TData[ ,j]),
x=0, y=0, colour="black",
arrow=arrow(angle=25, length=unit(0.25, "cm")))
p <- p + geom_text(data=TData, aes(label=Tlabel), size=3, vjust=1.35, colour="black")
代码的最后一行产生错误。请指出如何找出这个问题。提前谢谢。
答案 0 :(得分:2)
我不知道你要做什么,但失败的行是最后一行,因为你没有在映射中映射新的x和y变量。 geom_text()
需要x和y坐标,但您只提供label
参数,因此 ggplot 从p
获取x和y,其中只有7行数据Tlabel
长度为10.这解释了错误。我认为你的意思是在TData
的x = A和y = B处绘图?如果是这样,这有效:
p + geom_text(data=TData, mapping = aes(A, B, label=Tlabel),
size=3, vjust=1.35, colour="black")
答案 1 :(得分:2)
(这可能会在ggplot
邮件列表上找到更好的答案。)
看起来你正试图展示某种双标图......问题的根源在于你违反了ggplot的习惯用语,它要求你以一种与范围一致的方式指定变量。数据。
也许这可以做你想要的,通过一些替换所需列的名称的aes_string
技巧......
varnames <- colnames(AData)[-1]
v1 <- varnames[1]
v2 <- varnames[2]
p <- ggplot(data=AData,
aes_string(x=v1, y=v2)) + geom_point() + theme_bw()
## took out redundant 'data', made size bigger so I could see the labels
p <- p + geom_text(aes(label=Glabel), size=7, vjust=1.25, colour="black")
p <- p + geom_segment(data = TData, aes_string(xend = v1, yend=v2),
x=0, y=0, colour="black",
arrow=arrow(angle=25, length=unit(0.25, "cm")))
## added colour so I could distinguish this second set of labels
p <- p + geom_text(data=TData,
aes(label=Tlabel), size=10, vjust=1.35, colour="blue")