#' yyplot
#'
#' Save ggplot object or create plot device.
#' @rdname yyplot
#'
#' @param filename File name to create on disk.
#' @param plot Plot to save, defaults to last plot displayed.
#' @param width,height Plot size in cm. Defaults to the 8 x 6 cm.
#' @param path Path of the directory to save plot to.
#' @param dpi Plot resolution.
#' @param ... others values from svglite::svglite, grDevices::cairo_pdf,
#' grDevices::tiff, grDevices::jpeg, grDevices::png.
#' @param verbose logical, whether to display prompts.
#' @param compression tiff option, the type of compression to be used. c("none", "rle", "lzw", "jpeg", "zip", "lzw+p", "zip+p").
#' @param fix_text_size svglite option,
#' if TRUE each string will have the textLength CSS property set to the width
#' calculated by systemfonts and lengthAdjust='spacingAndGlyphs'.
#'
#' @examples
#' \dontrun{
#' ## build device
#' yydev("tmp001.tif")
#' ggplot(mtcars, aes(mpg, wt)) +
#' geom_point()
#' dev.off()
#'
#' ## Export the ggplot image directly.
#' ggplot(mtcars, aes(mpg, wt)) +
#' geom_point()
#' yysave(filename = "tmp003.pdf")
#' }
#' @export
yydev <- function(filename = "Rplot%03d.tif",
width = 12,
height = 12,
path,
dpi = 300,
verbose = TRUE,
compression = "lzw",
fix_text_size = FALSE,
...) {
## path
if (missing(path)) {
fpath <- filename
} else {
fpath <- paste0(path, "/", filename)
}
dir_path <- dirname(fpath)
if (!dir.exists(dir_path)) {
dir.create(dir_path)
}
## if
ext <- get_ext(filename)
if (ext %in% c("svg")) {
svglite::svglite(
filename = fpath,
width = width / 2.54, height = height / 2.54,
fix_text_size = fix_text_size, ...
)
} else if (ext %in% c("pdf")) {
grDevices::cairo_pdf(
filename = fpath,
width = width / 2.54, height = height / 2.54, ...
)
} else if (ext %in% c("tiff", "tif")) {
grDevices::tiff(
filename = fpath,
width = width, height = height,
units = "cm", res = dpi,
compression = compression, ...
)
} else if (ext %in% c("jpg", "jpeg")) {
grDevices::jpeg(
filename = fpath,
width = width, height = height,
units = "cm", res = dpi, ...
)
} else if (ext %in% c("png")) {
grDevices::png(
filename = fpath,
width = width, height = height,
units = "cm", res = dpi, ...
)
} else {
stop("yysave / yydev supports only svg, pdf, tif, jpg and png")
}
if (verbose) {
message("Don't forget to type dev.off().")
}
message(paste0("Image will be saved to '", fpath, "'."))
invisible()
}
#' @rdname yyplot
#' @export
yysave <- function(plot = last_plot(),
filename = "Rplot%03d.tif",
width = 12,
height = 12,
path,
dpi = 300,
compression = "lzw",
fix_text_size = FALSE,
...) {
yydev(
filename = filename,
width = width,
height = height,
path = path,
dpi = dpi,
verbose = FALSE,
compression = compression,
fix_text_size = fix_text_size,
...
)
# grid::grid.draw(plot)
on.exit(grDevices::dev.off())
print(plot)
message(paste("The image size is", width, "*", height, "cm.", sep = " "))
invisible()
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.