Place two graphic 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 use 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 drawing that I get is

Now how to set up the schedule so that countries have the same color scheme? and they follow the same order in two halves, for example, the United States and Great Britain first, etc.

Two simplify the question that I want to make two pirogarts be on the same chart, where one half of the piechart represents 2009 and the second half of 2010.

kind help.

thank

+4
source share
4 answers

. . , .

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)

col

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

, . 50% , :

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
+4
 lbls0 <- 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")


 nlbl <- length(lbls)
 yrs <- rep(2009:2010,each=nlbl/2)
 xlbls <- sprintf("%s (%d) %d%%",lbls0,yrs,pct)
 pie(slices,labels = xlbls, col=rep(rainbow(nlbl/2),2),
      main="Pie Chart of Countries")

, ?

 library(ggplot2); theme_set(theme_bw())
 dd <- data.frame(lbls0,yrs,slices,pct)
 dd$lbls0 <- reorder(dd$lbls0,-dd$slices)
 ggplot(dd,aes(x=lbls0,y=slices,fill=lbls0))+
    geom_bar(aes(alpha=factor(yrs)),
                    stat="identity",position=position_dodge(width=1))+
    scale_alpha_discrete(range=c(0.7,1.0))+
    geom_text(aes(label=paste0(pct,"%"),
              group=interaction(lbls0,yrs)),hjust=-0.2,
              position=position_dodge(width=1))+
                  coord_flip()+
    expand_limits(y=20)+labs(x="",y="total")

enter image description here

, , scale_alpha facet_wrap(~yrs)...

+12

reshape2:

# reading the data
df <- read.table(header=TRUE, text="Country   2009    2010
US  10  12
UK  13  14
Germany 18  11
China   9   8
Malaysia    7   15
Others  13  15")

# setting the column names correct
colnames(df) <- c("Country","2009","2010")

# reshaping the dataframe
require(reshape2)
df2 <- melt(df, id="Country")

# creating the plot
pie(df2$value, labels=paste0(df2$Country," (",df2$variable,") ",df2$value,"%"),
    col=rainbow(length(levels(df2$Country))), main="Pie Chart of Countries")

: enter image description here


:

pie(df2$value, labels=paste0(df2$Country," ",df2$value,"%"),
    col=rainbow(length(levels(df2$Country))), main="Pie Chart of Countries")
mtext("2009",side=3)
mtext("2010",side=1)

: enter image description here


@BenBolker, - . ?pie, :

- . . - .

(1985), . 264: ", , . , ." , .

+8

,

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)


dat <- data.frame(year = rep(c(2009, 2010), each = 6), lbls, slices)
dat$total <- with(dat, ave(slices, year, FUN = sum))


plot.new()

par(new = TRUE)
pie(dat$slices, border = NA, radius = 1,
    col = rainbow(length(lbls) / 2), labels = lbls,
    main = 'Pie Chart of Countries')

par(new = TRUE)
c2 <- c('grey50', 'grey75')[factor(dat$year)]
pie(dat$slices, border = c2, radius = .7, col = c2, labels = NA)

text(0, c(.3, -.3), 2009:2010)

enter image description here

+3

Source: https://habr.com/ru/post/1542847/


All Articles