2013-10-29 89 views
4

我打算創建boxplot並突出顯示兩兩比較的顯着性級別。這已被處理的previous post.使用ggplot函數向boxplot添加geom_path時出錯使用ggplot函數

當我爲我的數據集做的一樣,我收到以下錯誤:

"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變爲正常。我懷疑我錯過了一些微不足道的東西,但我無法抓住它。我非常感謝任何幫助。

+1

+1詢問你的第一個問題,一個小的測試數據集,你都試過了,發佈確切的錯誤信息,以及預期的結果! – Henrik

回答

4

因爲你沒有一個明確的說法datageom_path,從ggplotdata參數數據是「繼承」來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

+0

非常感謝! - Bharti – bharti

0

我加入這個作爲一個答案,因爲它太長,是一個評論,但它意味着作爲已經接受的答案的補充。

在我嘗試使用geom_path到有色barplot類似的情況,但得到這個錯誤:

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

然後事實證明,在fill選項應「關閉」,否則它遵循一個在前面的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 

enter image description here