# Process .pdf generated by tikzDevice to .png pdf2png <- function(path, options) { if (!grepl(".pdf$", path)) return(path) outpath <- gsub(".pdf", ".png", path) texpath <- gsub(".pdf", ".tex", path) img <- magick::image_read(path, density=300) magick::image_write(img, outpath, format="png") unlink(path) unlink(texpath) return(outpath) } knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", fig.width = 3, fig.height = 3, fig.show = "hold", out.width="50%", dev = "tikz", external = TRUE, fig.process = pdf2png ) library(tikzDevice) library(ggplot2) library(ggtikz) options(tikzLatexPackages = c(getOption("tikzLatexPackages"), "\\usetikzlibrary{calc}"))
ggtikz allows you to annotate plots created using ggplot2 with arbitrary TikZ code when rendering them with the tikzDevice. The annotations can be made using data coordinates, or with coordinates relative to a specified panel or the whole plot.
Plots with multiple panels (via facet_grid()
or facet_wrap()
) are supported.
For a few examples, see the examples vignette.
You can install the latest ggtikz release from CRAN with:
``` {r, eval = FALSE} install.packages("ggtikz")
Or get the development version from GitHub: ``` {r, eval = FALSE} # install.packages("devtools") devtools::install_github("osthomas/ggtikz", ref = "devel")
ggtikz()
.library(ggplot2) library(ggtikz) p <- ggplot(mtcars, aes(disp, mpg)) + geom_point() # 1. ## tikz("plot.tikz") ggtikz(p, "\\fill[red] (0.5,0.5) circle (5mm);", xy = "panel", panelx = 1, panely = 1) ## dev.off() ## Render with LaTeX ...
ggtikzCanvas()
.ggtikzAnnotation()
.library(ggplot2) library(ggtikz) p <- ggplot(mtcars, aes(disp, mpg)) + geom_point() # 1. canvas <- ggtikzCanvas(p) # 2. annot1 <- ggtikzAnnotation( # 3. " \\draw (0,0) -- (1,1); \\draw (0,1) -- (1,0); \\fill[red] (0.5,0.5) circle (5mm); ", xy = "panel", panelx = 1, panely = 1 ) annot2 <- ggtikzAnnotation( # 3. "\\draw[<-] (400,20) -- ++(0,3) node[at end, anchor=south] {(400,20)};", xy = "data", panelx = 1, panely = 1 ) ## tikz("plot.tikz") p # 4. + 5. canvas + annot1 + annot2 ## dev.off() ## Render with LaTeX ...
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.