Monday, September 10, 2012

Graphics for Statistics - figures with ggplot - Chapter 2 Part 3 - Pie Charts

Graphics for Statistics - Chapter 2 - Pie Charts: Figures 2.11-2.12

Graphics out of the book Graphics for Statistics and Data Analysis with R by Kevin Keen (book home page)


Pie charts of the United Nations budget for 2008-2009


  • in the first two lines we define a vector of grays - using the definition out of the book
  • using geom_bar() with width 1
  • mapping x to "", y to amount1 and fill to item1
  • to put the labels on the plot we use geom_text mapping y to the mid of each block
  • and we use scale_fill_manual to set the colours to our predefined grays

Maybe now it is time to look what we have done so far:


grays1<-gray(((2*length(df$amount1)-1):0)/(2*length(df$amount1)-1))
grays<-grays1[1:length(amount)]

ggplot(df,aes(x="",y=amount1,fill=item1)) +
  geom_bar(width=1,colour="black") +
  geom_text(aes(y=c(0,cumsum(df$amount1)[-nrow(df)]) + df$amount/2,label=df$item1),x=1.5,size=4) +
  scale_fill_manual(values=grays)
ggsave("fig2_11a.png")
Saving 7 x 6.99 in image


  • now we transform our coordinate system via coord_polar using the y-axis to define the angle within the pie chart
  • we get rid of the legend, background, axis ticks, text etc
grays1<-gray(((2*length(df$amount1)-1):0)/(2*length(df$amount1)-1))
grays<-grays1[1:length(amount)]

ggplot(df,aes(x="",y=amount1,fill=item1)) +
  geom_bar(width=1,colour="black") +
  geom_text(aes(y=c(0,cumsum(df$amount1)[-nrow(df)]) + df$amount/2,label=df$item1),x=1.5,size=4) +
  scale_fill_manual(values=grays) +
  coord_polar(theta="y") +
  theme(panel.background=element_rect(fill="white"),
        axis.text.x=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank(),
        axis.title.x=element_blank(),
        axis.title.y=element_blank(),
        legend.position="none"
        )
ggsave("fig2_11.png")
Saving 7 x 6.99 in image


  • this is one of the cases one should consider using classical graphics
  • here is the code used by K. Keen:
pie(df$amount1,labels=df$item1, 
               radius = 0.85, 
               clockwise=TRUE,
               col=grays,
               angle=120)
savePlot("fig2_11b.png")

So far, I have no solution for the pattern in figure 2.12


1 comment :

  1. Please check out r package 'patternplot' for pattern in pie chart
    https://cran.r-project.org/web/packages/patternplot/vignettes/patternplot-intro.html

    ReplyDelete