回复 第10楼 的 mzhang_t:
使用grid包也可以,但要麻烦很多。我写了段代码,仅供参考。
<br />
###################<br />
shu<-function()<br />
{<br />
as.numeric(sprintf("%3.2f",runif(2, min=0, max=0.5)))->liang<br />
c(liang,1-sum(liang))<br />
}</p>
<p>sapply(1:12, function(xxx) shu())->inter<br />
dimnames(inter)<-list(letters[1:3],month.abb)<br />
inter<br />
###################</p>
<p>library(grid)</p>
<p>###############################三个函数</p>
<p>inter.col<-c("slateblue3","magenta2","brown4")</p>
<p>bar.plot<-function(xxx,width.specified=0.25)<br />
{<br />
pushViewport(dataViewport(xData=c(0.5,12.5), yData=c(0,1),extension=c(0,0)))<br />
grid.rect()<br />
grid.grill(v=1:12,h=seq(0, 1, by=0.1), default.units ="native")<br />
inter.height<-as.vector(xxx)<br />
inter.y<-as.vector(apply(xxx,2,cumsum))<br />
inter.x<-rep(1:ncol(xxx),each=3)<br />
inter.width<-rep(width.specified, length(inter.x))<br />
grid.rect(x=inter.x, y=inter.y, width=inter.width, height=inter.height, default.units="native",just="top", gp=gpar(fill=inter.col))<br />
grid.yaxis(at=seq(0, 1, by=0.1),label =paste(seq(0, 1, by=0.1)*100,"%",sep=""))<br />
}</p>
<p>table.plot<-function(xxx)<br />
{<br />
pushViewport(dataViewport(xData=c(0.5,12.5), yData=c(0.5,4.5),extension=c(0,0)))<br />
grid.grill(v=seq(0.5,13,by=1),h=seq(0.5, 4.5, by=1), default.units ="native")<br />
inter.y<-rep(4:1, 3)<br />
inter.x<-rep(1:ncol(xxx),each=4)<br />
paste(xxx*100,"%",sep='')->yyy<br />
dim(yyy)<-dim(xxx)<br />
dimnames(yyy)<-dimnames(xxx)<br />
xxx<-yyy<br />
inter.label<-as.vector(rbind(colnames(xxx),xxx[nrow(xxx):1,]))<br />
grid.text(x=inter.x, y=inter.y, label=inter.label,default.units="native")<br />
}</p>
<p>legend.plot<-function(xxx)<br />
{<br />
inter.row<-nrow(xxx)+1<br />
grid.grill(v=c(0,1),h=(0:inter.row)/inter.row)<br />
(0:(2*inter.row))/(2*inter.row)->inter.l<br />
grid.text(c(row.names(xxx),''),x=0.3, y=inter.l[c(FALSE,TRUE)],gp=gpar(cex=2))<br />
grid.rect(x=0.5, y=(inter.l[c(FALSE,TRUE)])[1:nrow(xxx)],width=0.08,height=0.08,gp=gpar(fill=inter.col))<br />
}</p>
<p>#####################################生成图像<br />
png("try_barplot.png", width=1000,height=700)<br />
grid.newpage()<br />
pushViewport(viewport(width=0.90, height=0.95, layout=grid.layout(nrow=2,ncol=2,heights=c(2,1),widths=c(1,6))))<br />
pushViewport(viewport(layout.pos.row=1,layout.pos.col=2))<br />
bar.plot(inter)<br />
upViewport(2)<br />
pushViewport(viewport(layout.pos.row=2,layout.pos.col=2))<br />
table.plot(inter)<br />
upViewport(2)<br />
pushViewport(viewport(layout.pos.row=2,layout.pos.col=1))<br />
legend.plot(inter)<br />
upViewport(2)<br />
dev.off()</p>
<p>
</p>
生成的图像如附件所示。
[attachment=230486,1739]