Skip to content
Prev 75685 / 398502 Next

Stacked Area chart

Maybe this is useful:


stackedPlot <- function(data, time=NULL, col=1:length(data), ...) {

  if (is.null(time))
    time <- 1:length(data[[1]]);
  
  plot(0,0
       , xlim = range(time)
       , ylim = c(0,max(rowSums(data)))
       , t="n" 
       , ...
       );
  
  for (i in length(data):1) {

    # Die Summe bis zu aktuellen Spalte
    prep.data <- rowSums(data[1:i]);
    
    # Das Polygon muss seinen ersten und letzten Punkt auf der Nulllinie haben
    prep.y <- c(0
                , prep.data
                , 0
                )

    prep.x <- c(time[1]
                , time
                , time[length(time)]
                )
    
    polygon(prep.x, prep.y
            , col=col[i]
            , border = NA
            );
  }
}

dogs <- runif(10)+ 1:10;
cats <- 11 - dogs;
birds <- 11 - cats;
population <- data.frame(dogs,cats,birds);
stackedPlot(population);

Documentation is bad (as this function is for personal use) and you
may want to normalize your data, but it should be useful for different
sized data.frames.

Best regards,
     Christian 


2005/8/16, Mike Saunders <mike_saunders at umenfa.maine.edu>: