12

I am using qplot from ggplot2 to plot the distances of seeds dispersed by different species in R. When I use geom='density', it works just fine! But what I really want is a frequency/area plot, for which I get an error I do not know how to address.

This works:

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

This doesn't work:

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

Help? Thanks!

3
  • Check out ?geom_area, it requires y aesthetic. Also check out this question. Commented Jul 14, 2014 at 9:25
  • Thanks @tonytonov -- I tried geom_area previously and got the same error. What do you mean it "requires y aesthetic"? is that a package of some sort? Commented Jul 14, 2014 at 20:43
  • 1
    Since you've recently started learning ggplot, the best recommendation is to read Hadley Wickham's book. It is also a good idea to start using ggplot calls instead of qplot, it'll make your life easier in the long run. Commented Jul 15, 2014 at 7:45

2 Answers 2

8

The reason for that error (the message is quite obscure, I agree) is that you are trying to use geom_area (qplot(geom = "area") is roughly the same as + geom_area()). Whereas geom_density only requires x (x = Dist in your case), this is not enough for geom_area, as it additionally uses ymax (for help pages, see this, which links to this).

Here's an example of density and frequency plots which you may adjust for your data:

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

Your code sample is not reproducible, so I cannot verify the following line, but

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

may be what you need.

Sign up to request clarification or add additional context in comments.

4 Comments

@ tonytonov, thanks VERY much. The resulting plot is viable, but it's not quite what I had in mind. I was hoping to produce solid-colored shapes, with the dispersal shadow of the less important disperses overlaid on top of the solid shapes of the major dispersers for comparison. Why can't I just define a ymax and then use the geom_area function? How would I do that? I'm totally new to ggplot (and stackoverflow) so I apologize if I'm making a basic error.
You are welcome. Can you show an example of the plot you're trying to produce? You can, of course, map an aesthetic to ymax, but what will it be? Here you may find an example of your plot.
Hello again @tonytonov-- I solved the problem by putting the distances into bins of 10 meters and making the no. of seeds in each bin the y variable; then the geom_area() function worked just fine. Thanks for helping me figure it out!
You are welcome! I encourage you to write a short answer to your own question, so that any future readers will see the solution.
8

Regarding this error message it might help to point out that this is the error message you get when you use an empty data set for a histogram:

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

Unfortunately, the error message is not very helpful at all in this case. When I first ran into this problem it took me some time to figure out that I just accidentally had ended up with an empty data frame. The OP probably had a different problem, but it is always good to know that this error is connected to this stupid mistake.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.