[R] Multi-panel Pie Charts.

Sharpie chuck at sharpsteen.net
Wed Mar 24 20:38:25 CET 2010

Gurmeet wrote:
> Hi All,
> I'm trying to find out a way to plot multi-panel pie charts. It may not be
> the best way to present data, but I would still need one.

Would paneled bar charts not suffice?

I don't mean to be harsh, but the only situation I can think of where I
would consider a pie chart would be if I wanted to take advantage of the
fact that people are worse at judging differences in area than they are at
judging differences in length in order to hide some trend in my data.

Anyway, the following code uses ggplot2 to produce a paneled bar plot from
your data:

  require( ggplot2 )

  productData <- structure(list(variable = structure(c(1L, 1L, 1L, 1L, 2L,
    2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("ProdA", 
    "ProdB", "ProdC", "ProdD"), class = "factor"), month = structure(c(3L, 
    2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 2L, 4L, 1L), .Label =
    "Feb", "Jan", "Mar"), class = "factor"), value = c(25, 30, 25, 
    10, 25, 30, 50, 40, 40, 30, 20, 40, 10, 10, 5, 10)), .Names =
    "month", "value"), class = "data.frame", row.names = c(NA, -16L))

  productPlot <- qplot( variable, value, data = productData, geom = 'bar',
    xlab = 'Product', ylab = 'Percentage' ) +
    facet_wrap( ~ month ) +

  print( productPlot ) 

I know it's not what you want, but I personally need a strong argument for
generating pie charts before I would perpetuate their use.

Gurmeet wrote:
> 1. Is anyone aware of some in-built script/function which can do this for
> me. I'm aware of one given in Deepayan's book, but anything apart from
> this?
> 2. I tried using Deepayan's script on following data set but it doesn't
> seem
> to work as expected - labels are getting repeated/overlapping. I'm really
> not sure what could be the problem, can anyone help please. I hope data is
> in the right format, as expected.
>  Data read into object "foo":
> variable month value
> ProdA   Jan    25
> ProdA   Feb    30
> ProdA   Mar    25
> ProdA   Apr    10
> ProdB   Jan    25
> ProdB   Feb    30
> ProdB   Mar    50
> ProdB   Apr    40
> ProdC   Jan    40
> ProdC   Feb    30
> ProdC   Mar    20
> ProdC   Apr    40
> ProdD   Jan    10
> ProdD   Feb    10
> ProdD   Mar     5
> ProdD   Apr    10
> {SNIP}
> Thanks in advance,
> Gurmeet

Providing data as a printed table, like you did, is not the most effective
way to transmit example data on this list.  There are two major

  *  Tabulated data often gets mangled in email

  *  Tabulated data can not be copied and pasted directly into R to
regenerate the example data.frame- it takes me ~4 minutes of mucking around
with Excel to regenerate a .csv file that R can ingest.  This added time
will limit the number of people who will attempt to investigate your

The best way to transmit the contents of a data frame is to paste the output
of the dput() function.  This function dumps the data frame to an R command
that can be simply copied and pasted into a R session to regenerate the
data.frame.  The results of dput is the structure() command I used in my
example above.

Hope this helps in some way!


Charlie Sharpsteen
Undergraduate-- Environmental Resources Engineering
Humboldt State University
View this message in context: http://n4.nabble.com/Multi-panel-Pie-Charts-tp1687026p1689524.html
Sent from the R help mailing list archive at Nabble.com.

More information about the R-help mailing list