[R] barplot: segment-wise shading

Marc Schwartz marc_schwartz at me.com
Thu Jan 16 23:46:24 CET 2014

On Jan 16, 2014, at 12:45 PM, Martin Weiser <weiser2 at natur.cuni.cz> wrote:

> Dear listers,
> I would like to make stacked barplot, and to be able to define shading
> (density or angle) segment-wise, i.e. NOT like here:
> # Bar shading example
>     barplot(VADeaths, angle = 15+10*1:5, density = 20, col = "black",
>             legend = rownames(VADeaths))
> The example has 5 different angles of shading, I would like to have as
> many possible angle values as there are segments (i.e. 20 in the
> VADeaths example).
> I was not successful using web search.
> Any advice?
> Thank you for your patience.
> With the best regards,
> Martin Weiser

You could do something like this:

# Get the dimensions of VADeaths
> dim(VADeaths)
[1] 5 4

# How many segments?
> prod(dim(VADeaths))
[1] 20

Then use that value in the barplot() arguments as you desire, for example:

  barplot(VADeaths, angle = 15 + 10 * 1:prod(dim(VADeaths)), 
          density = 20, col = "black", legend = rownames(VADeaths))

or wrap the barplot() function in your own, which pre-calculates the values and then passes them to the barplot() call in the function.

See ?dim and ?prod

Be aware that a vector (eg. 1:5) will be 'dim-less', thus if you are going to use this approach for a vector based data object, you would want to use ?length


Marc Schwartz

More information about the R-help mailing list