Ottenere LaTeX in grafici R

Vorrei aggiungere la composizione di LaTeX a elementi di grafici in R (es .: titolo, etichette degli assi, annotazioni, ecc.) Usando la combinazione di base/latex o con ggplot2 .

Domande:

  • C’è un modo per ottenere LaTeX in grafici usando questi pacchetti, e se sì, come è fatto?
  • In caso contrario, ci sono pacchetti aggiuntivi necessari per realizzare questo.

Ad esempio, in Python matplotlib compila LaTeX tramite i pacchetti text.usetex come discusso qui: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Esiste un processo simile con il quale tali grafici possono essere generati in R ?

Ecco un esempio utilizzando ggplot2 :

 q <- qplot(cty, hwy, data = mpg, colour = displ) q + xlab(expression(beta +frac(miles, gallon))) 

alt text http://sofit.miximages.com/plot/10z7n7d.png

Come rubato da qui , il seguente comando usa correttamente LaTeX per disegnare il titolo:

 plot(1, main=expression(beta[1])) 

Vedi ?plotmath per maggiori dettagli.

Questo script contiene una funzione latex2exp per tradurre approssimativamente le formule LaTeX nelle espressioni plotmath di R. Puoi usarlo ovunque tu possa inserire annotazioni matematiche, come le etichette degli assi, le etichette delle legende e il testo generale.

Per esempio:

 x <- seq(0, 4, length.out=100) alpha <- 1:5 plot(x, xlim=c(0, 4), ylim=c(0, 10), xlab='x', ylab=latex2exp('\\alpha x^\\alpha\\text{, where }\\alpha \\in \\text{1:5}'), type='n') for (a in alpha) lines(x, a*x^a, col=a) legend('topleft', legend=latex2exp(sprintf("\\alpha = %d", alpha)), lwd=1, col=alpha) 

produce questa trama .

È ansible generare codice tikz da R: http://r-forge.r-project.org/projects/tikzdevice/

Ecco qualcosa dai miei rapporti di laboratorio.

  • tickzDevice esporta tikz immagini tikz per LaTeX
  • Nota che in alcuni casi "\\" diventa "\" e "$" diventa "$\" come nel seguente codice R: "$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Anche xtable esporta le tabelle in codice latex

Il codice:

 library(reshape2) library(plyr) library(ggplot2) library(systemfit) library(xtable) require(graphics) require(tikzDevice) setwd("~/DataFolder/") Lab5p9 <- read.csv (file="~/DataFolder/Lab5part9.csv", comment.char="#") AR <- subset(Lab5p9,Region == "Forward.Active") # make sure the data names aren't already in latex format, it interferes with the ggplot ~ # tikzDecice combo colnames(AR) <- c("$V_{BB}[V]$", "$V_{RB}[V]$" , "$V_{RC}[V]$" , "$I_B[\\mu A]$" , "IC" , "$V_{BE}[V]$" , "$V_{CE}[V]$" , "beta" , "$I_E[mA]$") # make sure the working directory is where you want your tikz file to go setwd("~/TexImageFolder/") # export plot as a .tex file in the tikz format tikz('betaplot.tex', width = 6,height = 3.5,pointsize = 12) #define plot name size and font size #define plot margin widths par(mar=c(3,5,3,5)) # The syntax is mar=c(bottom, left, top, right). ggplot(AR, aes(x=IC, y=beta)) + # define data set geom_point(colour="#000000",size=1.5) + # use points geom_smooth(method=loess,span=2) + # use smooth theme_bw() + # no grey background xlab("$I_C[mA]$") + # x axis label in latex format ylab ("$\\beta$") + # y axis label in latex format theme(axis.title.y=element_text(angle=0)) + # rotate y axis label theme(axis.title.x=element_text(vjust=-0.5)) + # adjust x axis label down theme(axis.title.y=element_text(hjust=-0.5)) + # adjust y axis lable left theme(panel.grid.major=element_line(colour="grey80", size=0.5)) +# major grid color theme(panel.grid.minor=element_line(colour="grey95", size=0.4)) +# minor grid color scale_x_continuous(minor_breaks=seq(0,9.5,by=0.5)) +# adjust x minor grid spacing scale_y_continuous(minor_breaks=seq(170,185,by=0.5)) + # adjust y minor grid spacing theme(panel.border=element_rect(colour="black",size=.75))# border color and size dev.off() # export file and exit tikzDevice function 

Ecco una funzione interessante che ti consente di utilizzare la funzionalità plotmath, ma con le espressioni memorizzate come oggetti della modalità carattere. Ciò ti consente di manipolarli a livello di codice utilizzando le funzioni di incolla o di espressione regolare. Non uso ggplot, ma dovrebbe funzionare anche lì:

  express <- function(char.expressions){ return(parse(text=paste(char.expressions,collapse=";"))) } par(mar=c(6,6,1,1)) plot(0,0,xlim=sym(),ylim=sym(),xaxt="n",yaxt="n",mgp=c(4,0.2,0), xlab="axis(1,(-9:9)/10,tick.labels,las=2,cex.axis=0.8)", ylab="axis(2,(-9:9)/10,express(tick.labels),las=1,cex.axis=0.8)") tick.labels <- paste("x >=",(-9:9)/10) # this is what you get if you just use tick.labels the regular way: axis(1,(-9:9)/10,tick.labels,las=2,cex.axis=0.8) # but if you express() them... voila! axis(2,(-9:9)/10,express(tick.labels),las=1,cex.axis=0.8) 

L’ho fatto alcuni anni fa con l’output in formato .fig anziché direttamente in un file .pdf; scrivi i titoli incluso il codice del latex e usa fig2ps o fig2pdf per creare il file grafico finale. Il setup che dovevo fare si è rotto con R 2.5; se dovessi rifarlo guarderei invece a tikz, ma lo includo comunque come un’altra potenziale opzione.

Le mie note su come l’ho fatto usando Sweave sono qui: http://www.stat.umn.edu/~arendahl/computing

Ho solo una soluzione. Si può prima generare un file eps, quindi riconvertirlo in pgf usando lo strumento eps2pgf. Vedi http://www.texample.net/tikz/examples/eps2pgf/