LaTeX in R-Plots einbinden

119

Ich möchte LaTeXElementen von Plots in R(z. B. Titel, Achsenbeschriftungen, Anmerkungen usw.) einen Satz hinzufügen , indem ich entweder die Kombination von base/latticeoder mit verwende ggplot2.

Fragen:

  • Gibt es eine Möglichkeit, LaTeXmit diesen Paketen in Handlungen einzusteigen, und wenn ja, wie wird das gemacht?
  • Wenn nicht, sind zusätzliche Pakete erforderlich, um dies zu erreichen.

Zum Beispiel beim Python matplotlibKompilieren LaTeXüber die hier beschriebenen text.usetexPakete: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Gibt es einen ähnlichen Prozess, mit dem solche Diagramme erstellt werden können R?

DrewConway
quelle
1
Dieses Tutorial könnte für Sie arbeiten (hat Wunder für mich gewirkt
Pragyaditya Das
Dieses Paket zum Rendern von LaTeX in Plots könnte hilfreich sein: github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Antworten:

48

Hier ist ein Beispiel mit ggplot2:

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

Alt-Text

Christopher DuBois
quelle
17
Leider hat dies nicht annähernd die Funktionen von LaTeX.
Myles Baker
Wie ist die Situation jetzt? Ich denke, es hat sich mit R 3.1.1 wenig verbessert.
Léo Léopold Hertz 준영
35

Wie von hier gestohlen , verwendet der folgende Befehl LaTeX korrekt, um den Titel zu zeichnen:

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

Siehe ?plotmathfür weitere Details.

Christopher DuBois
quelle
12
Interessantes, auch gutes Zeug mit Demo (Plotmath) Also muss die mathematische Notation durch die Syntax von Plotmath neu interpretiert werden? Das scheint eine herrliche Zeitverschwendung zu sein, besonders wenn Sie einen beteiligten LaTeX-Ausdruck haben. Deshalb mag ich die Fähigkeit von matplotlib, LaTeX selbst zu kompilieren. Gibt es etwas, das LaTeX verwenden und eine Plotmath-Syntax generieren kann?
DrewConway
Nicht, dass ich davon Wüste. Es gibt einen interessanten Beitrag bei RWiki darüber, wie Latex mit ggplot2 funktioniert: wiki.r-project.org/rwiki/…
Christopher DuBois
34

Das CRAN-Paket latex2exp enthält eine TeXFunktion, die LaTeX-Formeln in Rs Plotmath-Ausdrücke übersetzt. Sie können es überall dort verwenden, wo Sie mathematische Anmerkungen eingeben können, z. B. Achsenbeschriftungen, Legendenbeschriftungen und allgemeinen Text.

Beispielsweise:

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)

erzeugt diese Handlung .

Stefano Meschiari
quelle
Das ist toll! Können Sie erklären, was Sie ungefähr meinen ? Wie funktioniert das?
Frans Rodenburg
1
Mit ungefähr meinte ich, dass LaTeX-Zeichenfolgen in Rs Plotmath-Ausdrücke übersetzt werden. Wenn Plotmath ein bestimmtes LaTeX-Symbol nicht unterstützt, wird es entweder nicht gerendert oder durch Kombinieren verfügbarer Symbole gerendert.
Stefano Meschiari
Es ist aber nicht großartig. Sieht ekelhaft aus und unterstützt nur eine begrenzte Anzahl von Symbolen. Schlimmer ist, dass es anscheinend nichts gibt, was bei Plots mit "Veröffentlichungsqualität" hilft (etwas, zu dem die Leute fälschlicherweise behaupten, dass R in der Lage ist). Zeit, Python zu lernen, denke ich ..
Algen
6

Hier ist etwas aus meinen eigenen Laborberichten.

  • tickzDeviceexportiert tikzBilder fürLaTeX
  • Beachten Sie, dass in bestimmten Fällen wie im folgenden R-Code "\\"wird "\"und "$"wird "$\":"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Außerdem exportiert xtable Tabellen in Latexcode

Der Code:

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
N8TRO
quelle
4

Hier ist eine coole Funktion, mit der Sie die Plotmath-Funktionalität verwenden können, wobei die Ausdrücke jedoch als Objekte des Zeichenmodus gespeichert sind. Auf diese Weise können Sie sie programmgesteuert mithilfe von Einfügefunktionen oder Funktionen für reguläre Ausdrücke bearbeiten. Ich benutze kein ggplot, aber es sollte auch dort funktionieren:

    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)
mwrowe
quelle
2

Ich habe dies vor einigen Jahren getan, indem ich in ein .fig-Format anstatt direkt in ein .pdf ausgegeben habe. Sie schreiben die Titel einschließlich des Latexcodes und erstellen mit fig2ps oder fig2pdf die endgültige Grafikdatei. Das Setup, das ich dazu machen musste, brach mit R 2.5; Wenn ich es noch einmal tun müsste, würde ich stattdessen in Tikz schauen, aber ich schließe dies hier trotzdem als eine weitere mögliche Option ein.

Meine Notizen dazu, wie ich es mit Sweave gemacht habe, finden Sie hier: http://www.stat.umn.edu/~arendahl/computing

Aaron verließ Stack Overflow
quelle