[R] Stacked Area chart
Duncan Mackay
mackay at northnet.com.au
Wed Aug 17 03:11:14 CEST 2005
At 16:03 16/08/05, Mike Saunders wrote:
>I wish to do a stacked area chart to show how relative proportions of
>species within a stand have changed over time.
>
>I know this is simple, but can someone point me to the right function (if
>it exists). I have not had any luck finding it in the R-help, but maybe I
>am searching using the wrong keywords.
>
>Thanks,
>Mike
>
>
>Mike Saunders
>Research Assistant
>Forest Ecosystem Research Program
>Department of Forest Ecosystem Sciences
>University of Maine
>Orono, ME 04469
>207-581-2763 (O)
>207-581-4257 (F)
>
> [[alternative HTML version deleted]]
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
I recently did some graphs using xyplot in lattice where I had the data
ordered by days,
the groups argument and possibly by condition.
I have slightly reduced the code for general use and re run it
The process is to create a matrix of cumulative data (xy) and to make a
filled polygon for each of the
groups using the previous group value as the lower limit of the polygon.
For the first group there has to be a dummy lower limit in these cases of zero
ie rep(0,5) in the single panel graph in the rbind sequence
Plotting of a group line is referred to as j+1 row due to the fact that
there is a dummy
line for the lower polygon of the first group
The first script is for a single graph where there were the groups (codeno)
were 4 species.
The days were 1,2,4,6,9 and the y values (comp ) were percentages.
All groupings and conditions are numeric for both datasets
Any NAs were converted to 0s so as not to give error messages etc.
The second script is for a conditioned graph of similar data
but is generalised.
The maximum y limit can cause problems in setting.
In these cases I had a good idea of what they would be.
For count data it would be necessary to first do a calculation to find it.
# Single panel
xyplot(comp ~ days, data = stackln,
as.table = T,
groups = codeno,
subscripts = T,
panel= function(x,y,subscripts,groups)
{
xy <- rbind(rep(0,5), apply(sapply(1:4, function(j)
y[groups[subscripts]==j]),1,cumsum))
for(j in 1:4){
grid.polygon(x = c(c(1,2,4,6,9), rev(c(1,2,4,6,9)) ),
y = c(xy[(j+1),],rev(xy[(j),]) ),
gp = gpar(col = 0, fill = c(1,2,6,8)[j]),
default.units = "native")
}
}
)
# Conditioned panel
xyplot(comp ~ days|grps3, data = in1,
as.table = T,
groups = codeno,
subscripts = T,
panel = function(x,y,subscripts,groups,panel.number)
{
grp.no <- sort(unique(groups[subscripts]) )
x.vals <- sort(unique(x))
xy <- rbind(rep(0,length(x.vals) ),
apply(sapply(1:length(grp.no), function(j)
y[groups[subscripts]==grp.no[j]]),1,cumsum))
for (j in 1:length(grp.no))
{
grid.polygon(x = c(x.vals, rev(x.vals) ),
y = c(xy[(j+1),], rev(xy[(j),]) ),
gp = gpar(col = 0, fill = c(6,1,2,5,3,4,7,8)[j]),
default.units = "native")
} # for (j in 1:length(grp.no))
} # panel
)
Regards
Duncan Mackay
(The other Duncan Mackay)
Duncan Mackay
Dept of Agronomy and Soil Science
University of New England
ARMIDALE NSW 2351
Email: dmackay8 at pobox.une.edu.au
More information about the R-help
mailing list