Yvonnick NOEL
2010-Aug-13 20:12 UTC
[R] Lattice: Superimposing histograms with different colors and transparency effects
Dear users, I would like to plot several histograms superimposed on the same panel with different colors, with superimposed polygons appearing with transparency effects. I also want estimated densities to appear on the same plot. For several reasons, including that I like it, I want to use the lattice package. I have several questions regarding the use of the 'histogram' function with a group structure. I first thought that defining well-chosen values of alpha in trellis parameters would give the transparency effets, but this is not the case: library(lattice) # Some data x = c(rnorm(100), rnorm(100,2), rnorm(100,4)) grouping = gl(3,100,300) # Trellis parameters trellis.par.set("superpose.polygon"=list(alpha=rep(.5,3))) histogram(~x ,groups=grouping, type = "density", panel = "panel.superpose", panel.groups = function(x,...) { panel.histogram(x,...) panel.mathdensity(dmath=dnorm,args list(mean=mean(x),sd=sd(x)),...) }) Besides transparency, I get no filling colors at all in the, even though plot.polygon and superpose.polygon parameters are set. I clearly need to define my own colors with alpha channel set: mycolors = rgb(c(228, 55, 77), c(26, 126, 175), c(28, 184, 74),alpha = 50,maxColorValue = 255) ... and include 'mycolors' as an explicit argument in the histogram function: histogram(~x ,groups=grouping, type = "density",ylim=c(0,.45), panel = "panel.superpose",col=mycolors, auto.key=list(space="right",rectangles=FALSE,col=mycolors), panel.groups = function(x,...) { panel.histogram(x,...) panel.mathdensity(dmath=dnorm, args=list(mean=mean(x),sd=sd(x)),...) }) -> First question: Is it the only mean to get histogram bars filled, or do I do something wrong in the use of trellis.arg.set ? The problem with the previous approach is that the 'col' argument also affects the density curves colors, for which I don't want transparency effects. The 'col.lines' argument doesn't seem to change anything. Removing the (...) arguments is not an interesting option, as it suppresses some useful parameters for histograms (breaks, etc.). -> Second question: How do I get superimposed density curves with colors that differ from the bar colors (i.e. here: No transparency effects)? -> Third question: How do I find nice (and common) ylim values for the three histograms? I have set ylim=c(0,.45) above by hand, but I would like to see this calibrated beforehand. Adding a prepanel function is probably the way to go, but I am not sure how to manage this. -> Fourth question: I would like the bar borders to have colors that also vary from group to group, but unlike the 'col=' argument, adding a 'border=mycolors' argument in the histogram function call change colors from bar to bar! Thank you very much in advance. Best wishes, Yvonnick Noel, PhD. University of Brittany, Rennes France
Jorge Ivan Velez
2010-Aug-13 20:17 UTC
[R] Lattice: Superimposing histograms with different colors and transparency effects
Hi Yvonnick, Have you looked at ggplot2? There are two examples at the end of [1]. HTH, Jorge [1] http://had.co.nz/ggplot2/geom_histogram.html On Fri, Aug 13, 2010 at 4:12 PM, Yvonnick NOEL <> wrote:> Dear users, > > I would like to plot several histograms superimposed on the same panel > with different colors, with superimposed polygons appearing with > transparency effects. I also want estimated densities to appear on the > same plot. For several reasons, including that I like it, I want to use > the lattice package. > > I have several questions regarding the use of the 'histogram' function > with a group structure. > > I first thought that defining well-chosen values of alpha in trellis > parameters would give the transparency effets, but this is not the case: > > library(lattice) > > # Some data > x = c(rnorm(100), rnorm(100,2), rnorm(100,4)) > grouping = gl(3,100,300) > > # Trellis parameters > trellis.par.set("superpose.polygon"=list(alpha=rep(.5,3))) > > histogram(~x ,groups=grouping, type = "density", > panel = "panel.superpose", > panel.groups = function(x,...) { > panel.histogram(x,...) > panel.mathdensity(dmath=dnorm,args > list(mean=mean(x),sd=sd(x)),...) > }) > > Besides transparency, I get no filling colors at all in the, even though > plot.polygon and superpose.polygon parameters are set. I clearly need to > define my own colors with alpha channel set: > > mycolors = rgb(c(228, 55, 77), > c(26, 126, 175), > c(28, 184, 74),alpha = 50,maxColorValue = 255) > > ... and include 'mycolors' as an explicit argument in the histogram > function: > > histogram(~x ,groups=grouping, type = "density",ylim=c(0,.45), > panel = "panel.superpose",col=mycolors, > auto.key=list(space="right",rectangles=FALSE,col=mycolors), > panel.groups = function(x,...) { > panel.histogram(x,...) > panel.mathdensity(dmath=dnorm, > args=list(mean=mean(x),sd=sd(x)),...) > }) > > -> First question: Is it the only mean to get histogram bars filled, or > do I do something wrong in the use of trellis.arg.set ? > > The problem with the previous approach is that the 'col' argument also > affects the density curves colors, for which I don't want transparency > effects. The 'col.lines' argument doesn't seem to change anything. > Removing the (...) arguments is not an interesting option, as it > suppresses some useful parameters for histograms (breaks, etc.). > > -> Second question: How do I get superimposed density curves with colors > that differ from the bar colors (i.e. here: No transparency effects)? > > -> Third question: How do I find nice (and common) ylim values for the > three histograms? I have set ylim=c(0,.45) above by hand, but I would > like to see this calibrated beforehand. Adding a prepanel function is > probably the way to go, but I am not sure how to manage this. > > -> Fourth question: I would like the bar borders to have colors that > also vary from group to group, but unlike the 'col=' argument, adding a > 'border=mycolors' argument in the histogram function call change colors > from bar to bar! > > Thank you very much in advance. > > Best wishes, > > Yvonnick Noel, PhD. > University of Brittany, Rennes > France > > ______________________________________________ > 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 > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]