Monday, December 9, 2013

Data mountains and streams - stacked area plots in R



Below are two functions for producing stacked area plots. The first is the more typical approach where sequential series are stacked on top of another (function: plot.stacked), while the second approach is the more aesthetically-oriented version called a "stream plot" (function: plot.stream), which alternates series on either side of a meandering baseline (see here for the motivation, and here for the inspiration). 

Arguments are similar for both functions regarding the input of x and y series and polygon attributes (fill color, border color, border line width). The stream plot also requires that the degree of meandering for the baseline be defined by the arguments frac.rand and spar; frac.rand, controls the meander amplitude (uniform random numbers added to baseline as a fraction of the total y range) and spar controls the amount of smoothing (as fit by the function smooth.spline).

The plot above colors the series with a color gradient of when the first appear in the series, while the plot below colors series by their maximum value. The order of the plotting of the series can also affect the the emphasis on the plot. By default, plotting order is sequential by column, although two ordering options are built-in to the functions: order by maximum value, and order by first appearance.



The plot.stacked function:


The plot.stream function:

To reproduce example:

4 comments:

  1. Very nice plots. I have been looking for R code for stream plots for long time. Thanks.

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete
  3. Would love some help with this simple question - how can I modify the color palate? Say I want to use the rainbow colors, but want mine to start in the blues rather than the reds...? Thanks! Great graphs, and easy to use code.

    ReplyDelete
  4. Hi,

    When I try to run your example I get:
    Error in eval (expr, envir, enclos): could not find function "val2col"

    How can I fix this?
    Thanks

    ReplyDelete