Dear all, For two sets of random variables, say, x <- rnorm(1000, 10, 10) and y <- rnorm(1000. 3, 20). Is there any way to overlay the histograms (and density curves) of x and y on the plot of y vs. x? The histogram of x is on the x axis and that of y is on the y axis. The density curve here is to approximate the shape of the distribution and does not have to have area 1. Thank you in advance. Hannah [[alternative HTML version deleted]]
HI, #These links http://stackoverflow.com/questions/8545035/scatterplot-with-marginal-histograms-in-ggplot2 http://stackoverflow.com/questions/11022675/rotate-histogram-in-r-or-overlay-a-density-in-a-barplot #? might be helpful for you. A.K. ----- Original Message ----- From: li li <hannah.hlx at gmail.com> To: r-help <r-help at r-project.org> Cc: Sent: Monday, August 6, 2012 3:40 PM Subject: [R] Overlay Histogram Dear all, ? For two sets of random variables, say, x <-? rnorm(1000, 10, 10) and? y <- rnorm(1000. 3, 20). Is there any way to overlay the histograms (and density curves) of x and y on the plot of y vs. x? The histogram of x is on the x axis and that of y is on the y axis. ? The density curve here is to approximate the shape of the distribution and does not have to have area 1. ? Thank you in advance. ? ? ? Hannah ??? [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
See example(layout) for one idea. I think you might also want to look into rug plots. Best, Michael On Mon, Aug 6, 2012 at 2:40 PM, li li <hannah.hlx at gmail.com> wrote:> Dear all, > For two sets of random variables, say, x <- rnorm(1000, 10, 10) and y > <- rnorm(1000. 3, 20). > Is there any way to overlay the histograms (and density curves) of x and y > on the plot of y vs. x? > The histogram of x is on the x axis and that of y is on the y axis. > The density curve here is to approximate the shape of the distribution > and does not have to have area 1. > Thank you in advance. > Hannah > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
I cannot see any obvious way to do this. Ben Gunter's suggestion re layout makes sense. Here is a version using grid and ggplot2. Note I shamelessly stole code to due it. library(ggplot2) library(grid) dd <- data.frame(x = rnorm(1000, 10, 10), y = rnorm(1000, 3, 20)) # From https://stat.ethz.ch/pipermail/r-help/2011-June/280588.html p1 <- ggplot(dd, aes(x=x)) + geom_histogram(aes(y=..density..), fill="red", colour="black")+ geom_density(colour="black", adjust=4) + opts(title="Normal Random Sample") p2 <- ggplot(dd, aes(x=y)) + geom_histogram(aes(y=..density..), fill="blue", colour="black")+ geom_density(colour="black", adjust=4) + opts(title="Normal Random Sample") + coord_flip() # From StackOverflow http://stackoverflow.com/questions/9490482/combined-plot-of-ggplot2-not-in-a-single-plot-using-par-or-layout-functio # this simplifies the vp statement # otherwise we would have to use something like # print(plot5 , vp = viewport(layout.pos.row = 2, layout.pos.col = 1:2)) # and so on for the rest of the plots. vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) grid.newpage() pushViewport(viewport(layout = grid.layout(2, 1))) print(p1, vp = vplayout(1, 1)) print(p2, vp = vplayout(2, 1)) John Kane Kingston ON Canada> -----Original Message----- > From: hannah.hlx at gmail.com > Sent: Mon, 6 Aug 2012 15:40:55 -0400 > To: r-help at r-project.org > Subject: [R] Overlay Histogram > > Dear all, > For two sets of random variables, say, x <- rnorm(1000, 10, 10) and y > <- rnorm(1000. 3, 20). > Is there any way to overlay the histograms (and density curves) of x and > y > on the plot of y vs. x? > The histogram of x is on the x axis and that of y is on the y axis. > The density curve here is to approximate the shape of the distribution > and does not have to have area 1. > Thank you in advance. > Hannah > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.____________________________________________________________ FREE ONLINE PHOTOSHARING - Share your photos online with your friends and family! Visit http://www.inbox.com/photosharing to find out more!
Dear all, I have a few extra questions regarding this. Below is my code. My questions are: (1), How can I remove the labels, tick marks and numbers, and the word "density" for the histgrams. (2) On the top right corner, there is a empty grid. How can I remove it. Thank you in advance. Hannah require(ggplot2) require(gridExtra) x <- rnorm(10000,10, 2) y <- rnorm(10000, 20, 6) ##x<-xbar ##y <- ybar xy<-data.frame(x,y) xhist <- ggplot(xy, aes(x=x)) + geom_histogram(aes(y=..density..), fill="red", colour="black")+ geom_density(colour="black", adjust=4) + opts(title="") yhist <- ggplot(xy, aes(x=y)) + geom_histogram(aes(y=..density..), fill="blue", colour="black")+ geom_density(colour="black", adjust=4) + opts(title="") + coord_flip() none <- qplot(x,y, data=xy) + geom_blank() empty <- ggplot()+geom_point(aes(1,1), colour="white")+ opts(axis.ticks=theme_blank(), panel.background=theme_blank(), axis.text.x=theme_blank(), axis.text.y=theme_blank(), axis.title.x=theme_blank(), axis.title.y=theme_blank()) grid.arrange(xhist, empty, none, yhist, ncol=2, nrow=2, widths=c(3, 1), heights=c(1, 3)) 2012/8/7 li li <hannah.hlx@gmail.com>> Please ignore my previous message. The limits are correct. > Thanks again. > Hannah > > 2012/8/7 li li <hannah.hlx@gmail.com> > >> Hi John, >> Is it possible to set the xlim and ylim in the histograms. It seems >> that the limits are not the true ranges. >> Thanks. >> Hannah >> >> 2012/8/7 li li <hannah.hlx@gmail.com> >> >>> Thanks John. >>> >>> >>> 2012/8/7 John Kane <jrkrideau@inbox.com> >>> >>>> I cannot see any obvious way to do this. Ben Gunter's suggestion re >>>> layout makes sense. Here is a version using grid and ggplot2. Note I >>>> shamelessly stole code to due it. >>>> >>>> >>>> library(ggplot2) >>>> library(grid) >>>> >>>> dd <- data.frame(x = rnorm(1000, 10, 10), >>>> y = rnorm(1000, 3, 20)) >>>> # From https://stat.ethz.ch/pipermail/r-help/2011-June/280588.html >>>> >>>> p1 <- ggplot(dd, aes(x=x)) + >>>> geom_histogram(aes(y=..density..), fill="red", colour="black")+ >>>> geom_density(colour="black", adjust=4) + >>>> opts(title="Normal Random Sample") >>>> >>>> p2 <- ggplot(dd, aes(x=y)) + >>>> geom_histogram(aes(y=..density..), fill="blue", colour="black")+ >>>> geom_density(colour="black", adjust=4) + >>>> opts(title="Normal Random Sample") + >>>> coord_flip() >>>> >>>> # From StackOverflow >>>> http://stackoverflow.com/questions/9490482/combined-plot-of-ggplot2-not-in-a-single-plot-using-par-or-layout-functio >>>> >>>> # this simplifies the vp statement >>>> # otherwise we would have to use something like >>>> # print(plot5 , vp = viewport(layout.pos.row = 2, layout.pos.col = 1:2)) >>>> # and so on for the rest of the plots. >>>> vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col >>>> = y) >>>> >>>> grid.newpage() >>>> pushViewport(viewport(layout = grid.layout(2, 1))) >>>> print(p1, vp = vplayout(1, 1)) >>>> print(p2, vp = vplayout(2, 1)) >>>> >>>> >>>> >>>> >>>> John Kane >>>> Kingston ON Canada >>>> >>>> >>>> > -----Original Message----- >>>> > From: hannah.hlx@gmail.com >>>> > Sent: Mon, 6 Aug 2012 15:40:55 -0400 >>>> > To: r-help@r-project.org >>>> > Subject: [R] Overlay Histogram >>>> > >>>> > Dear all, >>>> > For two sets of random variables, say, x <- rnorm(1000, 10, 10) >>>> and y >>>> > <- rnorm(1000. 3, 20). >>>> > Is there any way to overlay the histograms (and density curves) of x >>>> and >>>> > y >>>> > on the plot of y vs. x? >>>> > The histogram of x is on the x axis and that of y is on the y axis. >>>> > The density curve here is to approximate the shape of the >>>> distribution >>>> > and does not have to have area 1. >>>> > Thank you in advance. >>>> > Hannah >>>> > >>>> > [[alternative HTML version deleted]] >>>> > >>>> > ______________________________________________ >>>> > R-help@r-project.org mailing list >>>> > https://stat.ethz.ch/mailman/listinfo/r-help >>>> > PLEASE do read the posting guide >>>> > http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> >>>> > and provide commented, minimal, self-contained, reproducible code. >>>> >>>> ____________________________________________________________ >>>> FREE ONLINE PHOTOSHARING - Share your photos online with your friends >>>> and family! >>>> Visit http://www.inbox.com/photosharing to find out more! >>>> >>>> >>>> >>> >> >[[alternative HTML version deleted]]