使用ggplot函数将geom_path添加到boxplot时出错

时间:2013-10-29 12:35:52

标签: r ggplot2

我打算创建一个箱线图并突出显示成对比较的显着性水平。这是在previous post.

中处理的

当我对我的数据集执行相同操作时,出现以下错误:

 "Incompatible lengths for set aesthetics: x, y"

这是一个用于说明问题的示例数据集 -

data1<-data.frame(island = c("A", "B", "B", "A", "A"), count = c(2, 5, 12, 2, 3))
g1<-ggplot(data1) +  geom_boxplot(aes(x = factor(island), y = count)) 
g1 + geom_path(x = c(1, 1, 2, 2), y = c(25, 26, 26, 25))  

我在运行第三行代码时遇到错误,而boxplot结果正常。我怀疑我错过了一些非常微不足道的事情,但我无法抓住它。我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

由于您在data中没有明确的geom_path参数,因此dataggplot参数的数据会“继承”到geom_path。当机器发现'data1'中x和y变量的长度与geom_path调用中x和y向量的长度不同时,机器会窒息。尝试为geom_path创建单独的数据框并使用data参数:

data2 <- data.frame(x = c(1, 1, 2, 2), y = c(25, 26, 26, 25))

ggplot(data = data1, aes(x = factor(island), y = count)) +
  geom_boxplot() +
  geom_path(data = data2, aes(x = x, y = y))

enter image description here

答案 1 :(得分:0)

我将此作为答案添加,因为评论时间过长,但它是对已经接受的答案的补充。

在类似的情况下,我尝试将geom_path用于彩色条状图,但出现了此错误:

Error in eval(expr, envir, enclos) : object 'Species' not found

然后事实证明,fill选项应该转为&#34;关闭&#34;否则它会跟随前一个ggplot调用中的Species调用,它要求## ## Load the libraries require(data.table) require(ggplot2) ## ## Make toy data data1 <- data.table(iris)[,list(value=Petal.Length,Species)] ## ## Draw the bars p <- ggplot(data=data1,aes(x=Species,y=value,fill=Species)) + geom_boxplot() + scale_x_discrete(breaks=NULL) ## ## Add lines and an annotation y1 <- data1[Species=="setosa",max(value)]*1.02 y2 <- y3 <- data1[,max(value)]*1.05 y4 <- data1[Species=="virginica",max(value)]*1.005 data2 <- data.frame(x.=c(1,1,3,3),y.=c(y1,y2,y3,y4)) p <- p + ## geom_path(data=data2,aes(x=x.,y=y.)) + # the line that cause the ERROR geom_path(data=data2,aes(x=x.,y=y.,fill=NULL)) + # the corrected line annotate("text",x=2,y=y3,label="***") p }列并导致此类错误。

    Ext.define('MyApp.controller.MyController', {
    extend: 'Ext.app.Controller',
    config: {
        routes: {
            '': 'doA',
            ':id': 'doB'
        },
    },
  }

enter image description here