tags:

views:

573

answers:

4

I want to plot stacked histograms in R; i.e. stack individual histograms in the third dimension.

Here's an example: http://www.denovosoftware.com/images/3d_fill_histo1.gif

alt text

+4  A: 

You could try using either rgl (see here) or 3dscatterplot (as in this example). Lattice also supports this:

library(lattice) 
library(latticeExtra) 
?panel.3dbars

You can see an example of this on the Learnr blog.

I don't believe that's technically a stacked histogram (a stacked histogram stacks the bars on top of each other). Moreover, a different kind of histogram could be more informative: look at the ggplot2 the documentation here for some examples.

 hist_cut <- ggplot(diamonds, aes(x=price, fill=cut)) 
 hist_cut + geom_bar() # defaults to stacking 

Another option is to use latticing instead, with facet_wrap in ggplot2 (see this post as an example).

Shane
A: 

I may find some interesting ideas in the links below:

one R tip a day - using base graphics

ggplot - using ggplot2

Best Regards, Manoel

Manoel Galdino
+4  A: 

One doesn't. This is a terrible display of data because the front histograms obscure the rear histograms and the perspective makes it just about impossible to read the values off the y-axis.

hadley
I agree 100% with this as well: that said, as Duncan Murdoch has said on several occasions, if one is going to use a 3D plot like this then using the `rgl` package so that it is interactive can help to address some of these concerns. Rotating the plot can reduce the obscuring effect.
Shane
A: 

thank you all for your suggestions, especially the one by Shane.

@hadley, I agree with your points, however, my situation is different: the main point I'm trying to convey by plotting four stacked histograms is that the tails vary significantly....the part that will get obscured is of no consequence in the data I'm presenting....also, being able to read the frequency axis is also not important since I'll be plotting the relative frequencies...

Gradstudent
You appear to have two accounts? You should try to consolidate.
Shane