2014-07-11 38 views
12

我使用ggplot2的qplot來繪製R中不同物種分散的種子的距離。當我使用geom='density'時,它工作得很好!但我真正想要的是一個頻率/面積圖,對此我得到一個我不知道如何解決的錯誤。R:從ggplot2:參數「env」的qplot中的錯誤缺失,沒有默認值

這工作:

qplot(Dist,data=testx,geom="density",fill=Animal,log=c('x','y'),alpha=I(0.5)) 

這不起作用:

qplot(Dist,data=testx,geom="area",fill=Animal,log=c('x','y')) 

Error in exists(name, envir = env, mode = mode) : 
    argument "env" is missing, with no default 

幫助?謝謝!

+0

查看'?geom_area',它需要'y'審美。另外檢查[這](http://stackoverflow.com/questions/4651428/making-a-stacked-area-plot-using-ggplot2)的問題。 – tonytonov

+0

Thanks @tonytonov - 我以前試過geom_area,並得到相同的錯誤。你是什​​麼意思「需要美學」?這是一種什麼樣的包? – user3831246

+1

既然你最近開始學習ggplot,最好的建議是閱讀哈德利韋翰的書。開始使用'ggplot'調用而不是'qplot'也是一個好主意,從長遠來看,它會讓你的生活更輕鬆。 – tonytonov

回答

8

該錯誤的原因(該消息很模糊,我同意)是您正在嘗試使用geom_areaqplot(geom = "area")+ geom_area()大致相同)。而geom_density只需要xx = Dist在你的情況),這是不夠的geom_area,因爲它額外使用ymax(幫助頁面,請參閱this,鏈接到this)。

這裏的密度和頻率曲線,你可以爲你的數據調整的一個例子:

ggplot(data=diamonds, aes(x=carat, fill=clarity)) + geom_density(alpha=0.5) 
ggplot(data=diamonds, aes(x=carat, colour=clarity)) + geom_freqpoly() 

你的代碼示例是不reproducible,所以我無法驗證以下行,但

ggplot(data=testx, aes(x=Dist, colour=Animal)) + geom_freqpoly() + 
    scale_x_log10() + scale_y_log10() 

可能是你需要的。

+0

@ tonytonov,非常感謝。由此產生的情節是可行的,但它不是我想到的。我希望能夠產生純色的形狀,將不太重要的分散體的分散陰影覆蓋在主要分散體的固體形狀的頂部上用於比較。爲什麼我不能只定義一個ymax然後使用geom_area函數?我會怎麼做?我對ggplot(和stackoverflow)完全陌生,所以如果我犯了一個基本錯誤,我很抱歉。 – user3831246

+0

不客氣。你能展示一個你想製作的情節的例子嗎?當然,你可以將美學映射到「ymax」,但它會是什麼? [這裏](http://www.cookbook-r.com/Graphs/)你可以找到你的情節的一個例子。 – tonytonov

+1

再次您好@ tonytonov--我通過將距離放入10米的垃圾桶中並解決問題,解決了問題。每個bin中的種子y變量;那麼geom_area()函數工作得很好。謝謝你幫我弄明白了! – user3831246

8

關於此錯誤消息,它可能會幫助指出,這是你的錯誤消息,當您使用空數據直方圖設置:

df <- data.frame(testx = rnorm(0)) 
p <- ggplot(df, aes(x=testx)) + 
    geom_histogram() 
plot(p) 

Error in exists(name, envir = env, mode = mode) : 
    argument "env" is missing, with no default 

不幸的是,該錯誤信息是不是非常有幫助所有在這種情況下。當我第一次遇到這個問題時,花了一些時間才發現我只是意外地結束了一個空的數據框。 OP可能有一個不同的問題,但總是很高興知道這個錯誤與這個愚蠢的錯誤有關。

相關問題