我正在尝试使用R中的以下数据创建一个饼图:
2009 2010
US 10 12
UK 13 14
Germany 18 11
China 9 8
Malaysia 7 15
Others 13 15
Run Code Online (Sandbox Code Playgroud)
我使用的命令是:
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")
Run Code Online (Sandbox Code Playgroud)
我得到的数字 
现在,我如何配置图表,以便国家/地区具有相同的配色方案?并且他们按照相同的顺序分两部分,首先它应该是美国和英国等等.
两个简化了我想在一个饼图中制作两个饼图的问题,其中一半的饼图代表2009年,另一半代表2010年.
善意的帮助.
谢谢
Ben*_*ker 12
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")
Run Code Online (Sandbox Code Playgroud)
您是否愿意考虑一种可视化的形式,以便更容易进行定量比较?
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")
Run Code Online (Sandbox Code Playgroud)

如果你对国家之间的比较更感兴趣,而不是国家内的年份,你可以跳过这些scale_alpha东西并使用facet_wrap(~yrs)......
您可以在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")
Run Code Online (Sandbox Code Playgroud)
这使:

有关年份标签的变体,您还可以使用:
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)
Run Code Online (Sandbox Code Playgroud)
这使:

正如@BenBolker所说,饼图不是一种很好的呈现数据的方式.值得引用的帮助页面?pie也是如此:
饼图是显示信息的一种非常糟糕的方式.眼睛擅长判断线性测量,判断相对区域不好.条形图或圆点图是显示此类数据的首选方式.
Cleveland(1985),第264页:"可以通过饼图显示的数据始终可以通过点图显示.这意味着可以做出沿着共同尺度的位置判断,而不是不太准确的角度判断."这个陈述是基于克利夫兰和麦吉尔的实证调查以及感性心理学家的调查.