33 lines
1.0 KiB
R
33 lines
1.0 KiB
R
|
|
||
|
# A base plot with grid viewports synchronised then
|
||
|
# further grid viewports pushed to contain pie charts
|
||
|
|
||
|
x <- runif(4)
|
||
|
y <- runif(4)
|
||
|
z <- matrix(runif(4*2), ncol=2)
|
||
|
|
||
|
maxpiesize <- unit(1, "inches")
|
||
|
totals <- apply(z, 1, sum)
|
||
|
sizemult <- totals/max(totals)
|
||
|
|
||
|
oldomi <- par("omi")
|
||
|
plot(x, y, xlim=c(-0.2, 1.2), ylim=c(-0.2, 1.2), type="n")
|
||
|
vps <- baseViewports()
|
||
|
# First grid action will trigger a new page unless we do this
|
||
|
# Should be able to avoid this yuckiness in the future
|
||
|
par(new=TRUE)
|
||
|
pushViewport(vps$inner, vps$figure, vps$plot)
|
||
|
grid.grill(h=y, v=x, default.units="native")
|
||
|
for (i in 1:4) {
|
||
|
pushViewport(viewport(x=unit(x[i], "native"),
|
||
|
y=unit(y[i], "native"),
|
||
|
width=sizemult[i]*maxpiesize,
|
||
|
height=sizemult[i]*maxpiesize))
|
||
|
grid.rect(gp=gpar(col="grey", fill="white", lty="dashed"))
|
||
|
par(mar=rep(0, 4), omi=gridOMI(), new=TRUE)
|
||
|
pie(z[i,], radius=1, labels=rep("", 2))
|
||
|
popViewport()
|
||
|
}
|
||
|
popViewport(3)
|
||
|
par(omi=rep(0, 4), mar=c(5.1, 5.1, 4.1, 2.1))
|