[R] ThinkCell type waterfall charts in R?

Millo Giovanni Giovanni_Millo at Generali.com
Thu Feb 5 19:04:07 CET 2009


Hello Kerstin, 

I had done something like this in the past but can't find it any more,
so I've put up a very raw example you might want to sophisticate upon. 
The idea is that of drawing an empty high-level plot and then putting
some low-level elements (mainly bars and connecting lines) into it
according to the coordinates of the data. Attached below, I hope it
helps and avoids you the sin of importing ppt charts into LaTeX
(aaargh!). 

PS The 'grid' package can help you produce more sophisticated (possibly
more "corporate-like", if this is a virtue...) graphs while retaining
the level of automation possible with R: e.g., for using Sweave for
automatic report generation. I'm sending you some examples by separate
mail. 

Best,
Giovanni

examples:  cascadeplot(rnorm(10)); cascadeplot(c(3,2,-7,5,8,3,-9,10))

cascadeplot <- function(x, barwidth=2, barspace=1,
                        colpalette=rep(grey(0.5), length(x)),
                        linecol="orange", ...) {
    ## how many bars? one for each data point
    barnum <- length(x)

    ## total graph width
    grw <- (barnum+1)*barspace+barnum*barwidth

    ## graph height
    l.grh <- min(cumsum(x),0)
    u.grh <- max(cumsum(x))+1

    ## draw an empty plot with the required dims
    ## (passing on any graphic parm you like, e.g. 'title')
    plot(0:grw, ylim=c(l.grh,u.grh), xlim=c(0,grw), type="n", ...)

    ## draw x axis
    lines(c(0,grw), c(0,0), col="blue")

    ## init vector (this will be useful later)
    ytxtpos <- rep(NA, length(x))

    ## for each data point draw a polygon
    ## starting from the level reached by the
    ## previous bar

    for(i in 1:length(x)) {
        ## each bar has 4 verices, abcd
        ## x coordinates for them:
        ## left vertices: ab, right: cd
        ## so bars are drawn like a->b->c->d
        leftx <- barspace+(barspace+barwidth)*(i-1)
        rightx <- leftx+barwidth
        xcoo <- c(leftx, leftx, rightx, rightx)
        ## y coord.:
        ## lower y:
        if(i==1) {
            lowy <- 0
            } else {
                lowy <- cumsum(x)[i-1]
            }
        highy <- cumsum(x)[i]
        ycoo <- c(lowy, highy, highy, lowy)
        polygon(xcoo, ycoo, col=colpalette[i], ...)

        ## now draw the connecting lines between
        ## the current and the previous bar
        if(i > 1) {
            lines(x=c(leftx-barspace,leftx),
                  y=c(lowy,lowy),
                  col=linecol)
        }

        ## save top-bar position for label
        ytxtpos[i] <- max(lowy, highy)+0.05*(u.grh-l.grh)
    }

    ## lastly, put the values on top of the bars
    xtxtpos <- (1:length(x))*(barwidth+barspace)-barwidth/2
    text(xtxtpos,ytxtpos,labels=as.character(x))
}



## original message below
------------------------------

Message: 157
Date: Tue, 03 Feb 2009 11:30:51 +0100
From: Kerstin <kerstin.balka at open-innovation-projects.org>
Subject: Re: [R] ThinkCell type waterfall charts in R?
To: Jim Lemon <jim at bitwrit.com.au>
Cc: r-help at r-project.org
Message-ID: <49881CDB.3090809 at open-innovation-projects.org>
Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"

Jim Lemon wrote:
> Kerstin wrote:
>> Hi all,
>>
>> with PowerPoint and ThinkCell one can draw something they call
>> waterfall chart and it looks like this:
>> http://www.think-cell.com/products/images/waterfall.gif
>>
>> I found discussions on waterfall charts in the archive of this
>> mailinglist, but unfortunately they looked totally different. Other 
>> names for this type of plot seem to be bridge chart, cascade chart, 
>> stair case chart, etc. but neither of them brought successful 
>> results. So I decided to ask you directly on the list.
>>
>> Does anyone have an idea on how I could plot this type of chart in R?
> Well Kirsten, it's a real challenge trying to find something that you
> _can't_ plot in R. Perhaps if you sent some data to the mailing list 
> and a description of how the various counts (?) are related to one 
> another, some R-nut may reply with what you want.
>
> Jim
Thanks a lot for your quick reply.

In the attached pdf you can see the chart I would like to draw with R. I

could of course make my life easier and use the Power Point chart, but 
importing a ppt chart into Latex would not make me sleep very well, 
besides the fact that all other plots in my document will come from R 
and I don't want this one to look totally different...

Cheers
Kerstin

-------------- next part --------------
A non-text attachment was scrubbed...
Name: Waterfall.pdf
Type: application/pdf
Size: 9761 bytes
Desc: not available
URL:
<https://stat.ethz.ch/pipermail/r-help/attachments/20090203/6b6e3787/att
achment-0001.pdf>

------------------------------


Giovanni Millo
Research Dept.,
Assicurazioni Generali SpA
Via Machiavelli 4, 
34132 Trieste (Italy)
tel. +39 040 671184 
fax  +39 040 671160

Ai sensi del D.Lgs. 196/2003 si precisa che le informazi...{{dropped:13}}




More information about the R-help mailing list