Only one of two densities is shown in ggplot2

2019-09-05 11:46发布

问题:

So I have two sets of data (of different length) that I am trying to group up and display the density plots for:

dat <- data.frame(dens = c(nEXP,nCNT),lines = rep(c("Exp","Cont")))
ggplot(dat, aes(x = dens, group=lines, fill = lines)) + geom_density(alpha = .5)

when I run the code it spits an error about the different lengths, i.e. "arguments imply different num of rows: x, y"

I then augment the code to:

dat <- data.frame(dens = c(nEXP,nCNT),lines = rep(c("Exp","Cont"),X))

Where X is the length of the longer argument so the lengths of "lines" will match that of dens.

Now the issue is that when when I go to plot the data I am only getting ONE density plot.... I know there should be two, since plotting the densities with plot/lines, is clearly two non-equal overlapping distributions, so I am assuming the error is with the grouping...

hope that makes sense.

回答1:

So I am not sure why but basically I simply had to do the rep() function manually:

A<-data.frame(ExpN, key = "exp")
B<-data.frame(ConN,key = "con")
colnames(A) <- c("a","key")
colnames(B) <- c("a","key")
dat <- rbind(A,B)
ggplot(dat, aes(x = dens, fill = key)) + geom_density(alpha = .5) 


回答2:

You need to tell rep how many times to repeat each element to get it to line up

dat <- data.frame(dens = c(nEXP,nCNT),
                  lines = rep(c("Exp","Cont"), c(length(nEXP),length(nCNT)))

That should give you a dat you can use with your ggplot call.