Obtenir LaTeX dans les tracés R


119

Je voudrais ajouter une LaTeXcomposition à des éléments de tracés dans R(par exemple: le titre, les étiquettes d'axe, les annotations, etc.) en utilisant soit la combinaison de base/latticeou avec ggplot2.

Des questions:

  • Existe-t-il un moyen d'accéder LaTeXà des parcelles en utilisant ces packages, et si oui, comment est-ce fait?
  • Sinon, des packages supplémentaires sont-ils nécessaires pour y parvenir.

Par exemple, dans les Python matplotlibcompilations LaTeXvia les text.usetexpackages comme indiqué ici: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Existe-t-il un processus similaire par lequel de telles parcelles peuvent être générées R?


1
Ce tutoriel pourrait fonctionner pour vous (a fait des merveilles pour moi :)): r-bloggers.com/latex-in-r-graphs
Pragyaditya Das

Ce package pour rendre LaTeX en tracés pourrait être utile: github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Réponses:


48

Voici un exemple utilisant ggplot2:

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

texte alternatif


17
Malheureusement, cela n'a pas presque les fonctionnalités de LaTeX.
Myles Baker du

Quelle est la situation maintenant? Je pense qu'il s'est peu amélioré avec R 3.1.1.
Léo Léopold Hertz 준영

35

Comme volé à partir d' ici , la commande suivante utilise correctement LaTeX pour dessiner le titre:

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

Voir ?plotmathpour plus de détails.


12
Intéressant, aussi bon avec la démo (plotmath) Donc la notation mathématique doit être réinterprétée à travers la syntaxe de plotmath? Cela semble être une perte de temps glorieuse, surtout si vous avez une expression LaTeX impliquée. C'est pourquoi j'aime la capacité de matplotlib à compiler LaTeX lui-même. Y a-t-il quelque chose qui peut prendre LaTeX et générer la syntaxe de plotmath?
DrewConway

Pas que je sache de. Il y a un article intéressant sur RWiki sur l'utilisation de latex avec ggplot2: wiki.r-project.org/rwiki/…
Christopher DuBois

34

Le package CRAN latex2exp contient une TeXfonction qui traduit les formules LaTeX en expressions plotmath de R. Vous pouvez l'utiliser partout où vous pouvez entrer des annotations mathématiques, telles que des étiquettes d'axe, des étiquettes de légende et du texte général.

Par exemple:

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)

produit ce graphique .


C'est bien! Pourriez-vous expliquer ce que vous entendez par approximativement ? Comment ça marche?
Frans Rodenburg

1
Par approximativement, je voulais dire que les chaînes LaTeX sont traduites dans les expressions plotmath de R - ce qui signifie que si plotmath ne prend pas en charge un symbole LaTeX spécifique, il ne sera pas rendu ou il sera rendu en combinant des symboles disponibles.
Stefano Meschiari

Ce n'est pas génial cependant. Cela a l'air dégoûtant et ne prend en charge qu'un nombre limité de symboles. Ce qui est pire, c'est qu'il ne semble y avoir rien qui puisse aider avec les tracés de «qualité de publication» (quelque chose dont les gens prétendent à tort que R est capable de). Il est temps d'apprendre Python, je suppose ..
algues


6

Voici quelque chose de mes propres rapports de laboratoire.

  • tickzDeviceexporte des tikzimages pourLaTeX
  • Notez que dans certains cas, "\\"devient "\"et "$"devient "$\"comme dans le code R suivant:"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Xtable exporte également les tables vers du code latex

Le 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

4

Voici une fonction intéressante qui vous permet d'utiliser la fonctionnalité plotmath, mais avec les expressions stockées en tant qu'objets du mode caractère. Cela vous permet de les manipuler par programme à l'aide de fonctions de collage ou d'expression régulière. Je n'utilise pas ggplot, mais cela devrait également fonctionner:

    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

Je l'ai fait il y a quelques années en sortant au format .fig au lieu de directement en .pdf; vous écrivez les titres avec le code latex et utilisez fig2ps ou fig2pdf pour créer le fichier graphique final. La configuration que je devais faire a cassé avec R 2.5; si je devais le refaire, je me pencherais plutôt sur tikz, mais je l'inclue quand même ici comme une autre option potentielle.

Mes notes sur la façon dont je l'ai fait avec Sweave sont ici: http://www.stat.umn.edu/~arendahl/computing



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.