isocubeGrob | R Documentation |
isometricCube()
is a grid grob function to render
isometric cube faces by automatically wrapping around affineGrob()
.
isocubeGrob(
top,
right,
left,
gp_border = grid::gpar(col = "black", lwd = 12),
name = NULL,
gp = grid::gpar(),
vp = NULL
)
grid.isocube(...)
top |
A grid grob object to use as the top side of the cube. ggplot2 objects will be coerced by |
right |
A grid grob object to use as the right side of the cube. ggplot2 objects will be coerced by |
left |
A grid grob object to use as the left side of the cube. ggplot2 objects will be coerced by |
gp_border |
A |
name |
A character identifier (for grid). |
gp |
A |
vp |
A |
... |
Passed to |
Any ggplot2
objects are coerced to grobs by ggplot2::ggplotGrob()
. Depending on what you'd like
to do you may want to instead manually convert a ggplot2 object gg
to a grob with gtable::gtable_filter(ggplot2::ggplotGrob(gg), "panel")
.
Not all graphics devices provided by grDevices
or other R packages support the affine transformation feature introduced in R 4.2.
If isTRUE(getRversion() >= '4.2.0')
then the active graphics device should support this feature if isTRUE(grDevices::dev.capabilities()$transformations)
.
In particular the following graphics devices should support the affine transformation feature:
R's grDevices::pdf()
device
R's 'cairo' devices e.g. grDevices::cairo_pdf()
, grDevices::png(type = 'cairo')
, grDevices::svg()
, grDevices::x11(type = 'cairo')
, etc. If isTRUE(capabilities('cairo'))
then R was compiled with support for the 'cairo' devices .
R's 'quartz' devices (since R 4.3.0) e.g. grDevices::quartz()
, grDevices::png(type = 'quartz')
, etc. If isTRUE(capabilities('aqua'))
then R was compiled with support for the 'quartz' devices (generally only TRUE
on macOS systems).
ragg
's devices (since v1.3.0) e.g. ragg::agg_png()
, ragg::agg_capture()
, etc.
A grid::gTree()
(grob) object of class "isocube".
As a side effect grid.isocube()
draws to the active graphics device.
if (require("grid") &&
getRversion() >= "4.2.0" &&
isTRUE(dev.capabilities()$transformations)) {
# Only works if active graphics device supports affine transformations
# such as `png(type="cairo")` on R 4.2+
grid.newpage()
gp_text <- gpar(fontsize = 72)
grid.isocube(top = textGrob("top", gp = gp_text),
right = textGrob("right", gp = gp_text),
left = textGrob("left", gp = gp_text))
}
if (require("grid") &&
getRversion() >= "4.2.0" &&
isTRUE(dev.capabilities()$transformations)) {
colors <- c("#D55E00", "#009E73", "#56B4E9")
spacings <- c(0.25, 0.2, 0.25)
texts <- c("pkgname", "left\nface", "right\nface")
rots <- c(45, 0, 0)
fontsizes <- c(52, 80, 80)
sides <- c("top", "left", "right")
types <- gridpattern::names_polygon_tiling[c(5, 7, 9)]
l_grobs <- list()
grid.newpage()
for (i in 1:3) {
if (requireNamespace("gridpattern", quietly = TRUE)) {
bg <- gridpattern::grid.pattern_polygon_tiling(
colour = "grey80",
fill = c(colors[i], "white"),
type = types[i],
spacing = spacings[i],
draw = FALSE)
} else {
bg <- rectGrob(gp = gpar(col = NA, fill = colors[i]))
}
text <- textGrob(texts[i], rot = rots[i],
gp = gpar(fontsize = fontsizes[i]))
l_grobs[[sides[i]]] <- grobTree(bg, text)
}
grid.newpage()
grid.isocube(top = l_grobs$top,
right = l_grobs$right,
left = l_grobs$left)
}
# May take more than 5 seconds on CRAN machines
if (require("aRtsy") &&
require("grid") &&
require("ggplot2") &&
requireNamespace("gtable", quietly = TRUE) &&
getRversion() >= "4.2.0" &&
isTRUE(dev.capabilities()$transformations)
) {
gg <- canvas_planet(colorPalette("lava"), threshold = 3) +
scale_x_continuous(expand=c(0, 0)) +
scale_y_continuous(expand=c(0, 0))
grob <- ggplotGrob(gg)
grob <- gtable::gtable_filter(grob, "panel") # grab just the panel
grid.newpage()
grid.isocube(top = grob, left = grob, right = grob,
gp_border = grid::gpar(col = "darkorange", lwd = 12))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.