Hi everyone, I'm trying to plot density curves on the axes of a plot, in a similar way to the 'rug' function. I have had a look at a few approaches and libraries, including: * layout http://addictedtor.free.fr/graphiques/RGraphGallery.php? graph=78 * fancygraph http://addictedtor.free.fr/graphiques/RGraphGallery.php? graph=81 * ggplot - gave up since it needs R 2.3.0 and today I need to run on less than that * grid - probably powerful, good approach, but too much effort for a midnight hack * rug - since it does something similar * lattice - it has multiple graphs, but I think they may need to be homogeneous * plot + lines * plot + plot And here is the solution I am using at the moment, based upon layout. Can anyone suggest a better way to do this? -Alex Brown ===# some data x1 = rnorm(100) y1 = rnorm(100) # setup the layout opar = par(no.readonly=TRUE) omar = par("mar") l = layout(matrix(c(2,0,1,3),2),c(1,4),c(4,1)) par(cex=1,bty="n") # first plot : main plot par(mar=omar * c(0,0,1,1)) # just top and right margins plot(x1, y1, axes=FALSE, main="Density Margins", xlab="", ylab="" ) # vars usepoly <- TRUE plott = ifelse(usepoly,"n","l") par(col="blue") # second plot : y axis density par(mar=omar * c(0,1,1,0)) par(xpd=NA) yd = density(y1,from=min(y1),to=max(y1)) ydd= data.frame(x=-yd$y, y=yd$x) plot(ydd, xaxt="n",xlim=c(0,min(ydd$x)),type= plott,bty="n",ylab="y (density)",xlab="") if(usepoly) { ydd=rbind(ydd, c(0,max(ydd$y)), c(0,min(ydd$y))) polygon(ydd,col="grey",border=NA) } # third plot : x axis density par(mar=omar * c(1,0,0,1)) par(xpd=NA) xd = density(x1,from=min(y1),to=max(y1)) xdd= data.frame(x=xd$x, y=-xd$y) plot(xdd, yaxt="n",ylim=c(0,min(xdd$y)),type= plott,xlab="x (density)",ylab="") if(usepoly) { xdd=rbind(xdd,c(max(xdd$x),0), c(min(xdd$x),0)) polygon(xdd,col="grey",border=NA) } par(opar) === [[alternative HTML version deleted]]