**A note:** You want to answer questions about your data, and not create questions about the visualization method itself. Often, boring is better. It does make comparisons of comparisons easier to comprehend too. **An Answer:** The need for simple formatting beyond R's base package probably explains the popularity of Hadley's ggplot package in R. library(sn) library(ggplot2) # Simulate from a normal and skew-normal distributions x = rnorm(250,0,1) y = rsn(250,0,1,5) ##============================================================================ ## I put the data into a data frame for ease of use ##============================================================================ dat = data.frame(x,y=y[1:250]) ## y[1:250] is used to remove attributes of y str(dat) dat = stack(dat) str(dat) ##============================================================================ ## Density plots with ggplot2 ##============================================================================ ggplot(dat, aes(x=values, fill=ind, y=..scaled..)) + geom_density() + opts(title = "Some Example Densities") + opts(plot.title = theme_text(size = 20, colour = "Black")) ggplot(dat, aes(x=values, fill=ind, y=..scaled..)) + geom_density() + facet_grid(ind ~ .) + opts(title = "Some Example Densities \n Faceted") + opts(plot.title = theme_text(size = 20, colour = "Black")) ggplot(dat, aes(x=values, fill=ind)) + geom_density() + facet_grid(ind ~ .) + opts(title = "Some Densities \n This time without \"scaled\" ") + opts(plot.title = theme_text(size = 20, colour = "Black")) ##---------------------------------------------------------------------------- ## You can do histograms in ggplot2 as well... ## but I don't think that you can get all the good stats ## in a table, as with hist ## e.g. stats = hist(x) ##---------------------------------------------------------------------------- ggplot(dat, aes(x=values, fill=ind)) + geom_histogram(binwidth=.1) + facet_grid(ind ~ .) + opts(title = "Some Example Histograms \n Faceted") + opts(plot.title = theme_text(size = 20, colour = "Black")) ## Note, I put in code to mimic the default "30 bins" setting ggplot(dat, aes(x=values, fill=ind)) + geom_histogram(binwidth=diff(range(dat$values))/30) + opts(title = "Some Example Histograms") + opts(plot.title = theme_text(size = 20, colour = "Black")) Finally, I've found that adding a simple background helps. Which is why I wrote "bgfun" which can be called by panel.first bgfun = function (color="honeydew2", linecolor="grey45", addgridlines=TRUE) { tmp = par("usr") rect(tmp[1], tmp[3], tmp[2], tmp[4], col = color) if (addgridlines) { ylimits = par()$usr[c(3, 4)] abline(h = pretty(ylimits, 10), lty = 2, col = linecolor) } } plot(rnorm(100), panel.first=bgfun()) ## Plot with original example data op = par(mfcol=c(2,1)) hist(x, panel.first=bgfun(), col='antiquewhite1', main='Bases belonging to us') hist(y, panel.first=bgfun(color='darkolivegreen2'), col='antiquewhite2', main='Bases not belonging to us') mtext( 'all your base are belong to us', 1, 4) par(op)