| |
| library(grid) |
| |
| HersheyLabel <- function(x, y=unit(.5, "npc")) { |
| lines <- strsplit(x, "\n")[[1]] |
| if (!is.unit(y)) |
| y <- unit(y, "npc") |
| n <- length(lines) |
| if (n > 1) { |
| y <- y + unit(rev(seq(n)) - mean(seq(n)), "lines") |
| } |
| grid.text(lines, y=y, gp=gpar(fontfamily="HersheySans")) |
| } |
| |
| ################################################################################ |
| ## Nesting of patterns, clipping paths, masks, groups, and paths |
| ## ALL disallowed within a path or clipping path |
| |
| grid.newpage() |
| pat <- pattern(circleGrob(r=unit(.5, "cm"), gp=gpar(fill="black")), |
| width=unit(2, "cm"), height=unit(2, "cm"), |
| extend="repeat") |
| path <- circleGrob(gp=gpar(fill=pat)) |
| pushViewport(viewport(clip=path)) |
| grid.rect(gp=gpar(fill="grey")) |
| HersheyLabel("clipping path is based on circle |
| circle has (tiling) pattern fill |
| result is grey circle") |
| |
| grid.newpage() |
| pat <- linearGradient() |
| path <- circleGrob(gp=gpar(fill=pat)) |
| pushViewport(viewport(clip=path)) |
| grid.rect(gp=gpar(fill="grey")) |
| HersheyLabel("clipping path is based on circle |
| circle has gradeint fill |
| result is grey circle") |
| |
| grid.newpage() |
| pat <- pattern(circleGrob(r=unit(.5, "cm"), gp=gpar(fill="black")), |
| width=unit(2, "cm"), height=unit(2, "cm"), |
| extend="repeat") |
| path <- circleGrob(gp=gpar(fill=pat)) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on circle |
| circle has (tiling) pattern fill |
| path is filled grey |
| result is filled grey circle |
| (pattern fill silently ignored)") |
| |
| grid.newpage() |
| cpath <- circleGrob(r=.2) |
| path <- circleGrob(vp=viewport(clip=cpath)) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on circle |
| circle has viewport with |
| clipping path based on smaller circle |
| result is filled grey circle |
| (clipping path ignored with warning)") |
| |
| grid.newpage() |
| mask <- circleGrob(r=.2, gp=gpar(fill="black")) |
| path <- circleGrob(vp=viewport(mask=mask)) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on circle |
| circle has viewport with |
| mask based on smaller circle |
| result is filled grey circle |
| (mask ignored with warning)") |
| |
| grid.newpage() |
| group <- groupGrob(circleGrob(r=.2)) |
| path <- gTree(children=gList(circleGrob(), group)) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on circle AND group |
| (group is smaller circle) |
| result is filled grey circle |
| (group ignored with warning)") |
| |
| grid.newpage() |
| grid.define(circleGrob(r=.2), name="g") |
| path <- gTree(children=gList(circleGrob(), useGrob("g"))) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on circle AND group *use* |
| (group is smaller circle) |
| result is filled grey circle |
| (group ignored with warning)") |
| |
| grid.newpage() |
| subpath <- strokeGrob(circleGrob(r=.2)) |
| path <- gTree(children=gList(circleGrob(), subpath)) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on circle AND subpath |
| (subpath is smaller circle) |
| result is filled grey circle |
| (subpath ignored with warning)") |
| |
| grid.newpage() |
| subpath <- strokeGrob(circleGrob(r=.2)) |
| path <- gTree(children=gList(subpath, circleGrob())) |
| grid.fillStroke(path, gp=gpar(fill="grey")) |
| HersheyLabel("path is based on subpath AND circle |
| (subpath is smaller circle) |
| result is filled grey circle |
| (subpath ignored with warning)") |
| |
| |
| ################################################################################ |
| ## TODO |
| |
| notrun <- function() { |
| |
| } ## notrun() |