ggplot2出错

时间:2011-09-16 20:57:40

标签: r ggplot2

我不知道代码中缺少什么?

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")

代码的最后一行产生错误。请指出如何找出这个问题。提前谢谢。

2 个答案:

答案 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")