R: ggplot2中qplot的错误:缺少参数“env”,没有默认值。

12

我在R中使用ggplot2的qplot绘制不同物种散布的种子距离。当我使用geom='density'时,它可以正常工作!但是我真正想要的是一个频率/面积图,对此我遇到了一个错误,但不知道如何解决。

以下内容正常:

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

需要帮助吗?谢谢!


请查看?geom_area,它需要y美学。还可以查看这个问题。 - tonytonov
谢谢@tonytonov——我之前尝试过geom_area,但是得到了相同的错误。你说的“需要y美学”是什么意思?那是某种软件包吗? - user3831246
1
由于你最近开始学习ggplot,最好的建议是阅读Hadley Wickham的书。另外一个好主意是开始使用ggplot函数调用而不是qplot,这将使你的生活在长远来看更容易。 - tonytonov
2个回答

8
那个错误的原因(我同意,信息相当隐晦)是您正在尝试使用 geom_areaqplot(geom = "area") 大致相当于 + geom_area())。而 geom_density 只需要 x(在您的情况下为 x = 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()

您的代码示例不可重现,因此我无法验证以下行:

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

可能是您所需要的。


@tonytonov,非常感谢。得到的图形是可行的,但不完全符合我的想法。我希望能够生成实色形状,并在主要分散体的实色形状上叠加较不重要分散体的分散阴影以进行比较。为什么我不能定义一个ymax,然后使用geom_area函数呢?我该怎么做?我对ggplot(和stackoverflow)完全是新手,所以如果我犯了基本错误,请原谅。 - user3831246
欢迎。你能展示一下你想要生成的图形吗?当然,你可以将美学映射到ymax,但它会是什么呢?在这里,你可以找到一个类似于你的图形的例子。 - tonytonov
1
你好 @tonytonov-- 我通过将距离分成每10米一组并将每个组中的种子数量作为 y 变量,然后 geom_area() 函数就能正常工作了。感谢您帮我解决问题! - user3831246
3
非常感谢!我鼓励您写一个简短的回答,这样任何未来的读者都可以看到解决方案。 - tonytonov

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可能有不同的问题,但知道这个错误与这个愚蠢的错误相关总是好的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接