Search code examples
rplotpie-chart

Putting two Pie Charts in one


I am trying to create a pie chart with my following data in R:

    2009    2010
US  10  12
UK  13  14
Germany 18  11
China   9   8
Malaysia    7   15
Others  13  15

The command I am using is:

slices<-c(10,13,18,9,7,13,12,14,11,8,15,15)
 lbls <- c("US","UK","Germany","China", "Malaysia", "Others","US","UK","Germany","China", "Malaysia", "Others") 
 pct <- round(slices/sum(slices)*100)
 lbls <- paste(lbls,"%",sep="")
 lbls <- paste(lbls, pct)
 pie(slices,labels = lbls, col=rainbow(length(lbls)),  main="Pie Chart of Countries")

The figure that I am getting is

Now how can I configure the graph so that the countries have same colour scheme? and they follow the same order in two halves, like first it should be US and the UK and so on.

Two simplify the question I want to make two piecharts in one piechart, where one half of piechart represents 2009 and the other half 2010.

kindly help.

Thank you


Solution

  • This might work. At least the two halves have the same color scheme. I am not sure what you mean by the same order.

    slices<-c(10,13,18,9,7,13,12,14,11,8,15,15)
    pct   <- round(slices/sum(slices)*100)
    
    lbls <- c("US","UK","Germany","China", "Malaysia", "Others","US","UK","Germany","China", "Malaysia", "Others") 
    lbls <- paste(lbls,"%",sep="")
    lbls <- paste(lbls, pct)
    
    col  <- c("yellow", "orange", "red", "purple", "blue", "green", "yellow", "orange", "red", "purple", "blue", "green")
    
    pie(slices,labels = lbls,  main="Pie Chart of Countries", col = col)
    

    You can shorten the col code with

    col  <- rep(c("yellow", "orange", "red", "purple", "blue", "green"),2)
    

    I am not certain what you want regarding the two halves. If you want to standardize the percentages to 50% for each half this might work:

    a <- c(7, 9, 12, 6, 5, 9)
    a2 <- (a/sum(a)) * 50
    a2
    # [1]  7.291667  9.375000 12.500000  6.250000  5.208333  9.375000
    
    b <- c(8, 10, 8, 6, 10, 10)
    b2 <- (b/sum(b)) * 50
    b2
    # [1] 7.692308 9.615385 7.692308 5.769231 9.615385 9.615385
    
    pct <- round(c(a2,b2),2)
    pct