Ottenere LaTeX in R Plots


119

Vorrei aggiungere la LaTeXcomposizione tipografica agli elementi dei grafici in R(ad esempio: il titolo, le etichette degli assi, le annotazioni, ecc.) Utilizzando la combinazione di base/latticeo con ggplot2.

Domande:

  • C'è un modo per entrare LaTeXnelle trame usando questi pacchetti e, in tal caso, come si fa?
  • In caso contrario, sono necessari pacchetti aggiuntivi per farlo.

Ad esempio, nelle Python matplotlibcompilazioni LaTeXtramite i text.usetexpacchetti come discusso qui: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Esiste un processo simile mediante il quale è possibile generare tali grafici R?


1
Questo tutorial potrebbe funzionare per te (ha funzionato a meraviglia per me :)): r-bloggers.com/latex-in-r-graphs
Pragyaditya Das

Questo pacchetto per rendere LaTeX in grafici potrebbe essere utile: github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Risposte:


48

Ecco un esempio che utilizza ggplot2:

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

testo alternativo


17
Sfortunatamente, questo non ha quasi le caratteristiche di LaTeX.
Myles Baker

Qual è la situazione adesso? Penso che sia migliorato con R 3.1.1 poco.
Léo Léopold Hertz 준영

35

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

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

Vedi ?plotmathper maggiori dettagli.


12
Cose interessanti, anche buone con demo (plotmath) Quindi la notazione matematica deve essere reinterpretata attraverso la sintassi del plotmath? Sembra una gloriosa perdita di tempo, specialmente se hai un'espressione LaTeX coinvolta. Ecco perché mi piace la capacità di matplotlib di compilare LaTeX stesso. C'è qualcosa che può prendere LaTeX e generare la sintassi del plot?
DrewConway

Non che io sappia. C'è un post interessante su RWiki su come far funzionare il lattice con ggplot2: wiki.r-project.org/rwiki/…
Christopher DuBois

34

Il pacchetto CRAN latex2exp contiene una TeXfunzione che traduce le formule LaTeX in espressioni di plotmath di R. Puoi usarlo ovunque tu possa inserire annotazioni matematiche, come etichette degli assi, etichette della legenda e 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=TeX('$\\alpha  x^\\alpha$, where $\\alpha \\in 1\\ldots 5$'), 
     type='n', main=TeX('Using $\\LaTeX$ for plotting in base graphics!'))

invisible(sapply(alpha, function(a) lines(x, a*x^a, col=a)))

legend('topleft', legend=TeX(sprintf("$\\alpha = %d$", alpha)), 
       lwd=1, col=alpha)

produce questo grafico .


È fantastico! Potresti spiegare cosa intendi per approssimativamente ? Come funziona?
Frans Rodenburg

1
Approssimativamente, volevo dire che le stringhe LaTeX sono tradotte nelle espressioni di plotmath di R - il che significa che se il plotmath non supporta uno specifico simbolo LaTeX, o non sarà renderizzato o sarà renderizzato combinando i simboli che sono disponibili.
Stefano Meschiari

Non è fantastico però. Sembra disgustoso e supporta solo un numero limitato di simboli. Quel che è peggio è che non sembra esserci nulla che aiuti con i grafici di "qualità della pubblicazione" (qualcosa di cui le persone affermano falsamente che R è capace). È ora di imparare Python immagino ..
alghe


6

Ecco qualcosa dai miei rapporti di laboratorio.

  • tickzDeviceesporta tikzimmagini perLaTeX
  • Si noti che in alcuni casi "\\"diventa "\"e "$"diventa "$\"come nel seguente codice R:"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Inoltre 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

4

Ecco una funzione interessante che ti consente di utilizzare la funzionalità di plotmath, ma con le espressioni memorizzate come oggetti della modalità carattere. Ciò consente di manipolarli a livello di codice utilizzando le funzioni di incolla o di espressioni regolari. 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)

2

L'ho fatto alcuni anni fa eseguendo l'output in un formato .fig invece che direttamente in un .pdf; scrivi i titoli compreso il codice in latex e utilizzi fig2ps o fig2pdf per creare il file grafico finale. La configurazione che ho dovuto fare ha rotto con R 2.5; se dovessi farlo di nuovo, esaminerei invece tikz, ma lo includo comunque qui come un'altra potenziale opzione.

I miei appunti su come l'ho fatto usando Sweave sono qui: http://www.stat.umn.edu/~arendahl/computing



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.