web-dev-qa-db-fra.com

Obtenir LaTeX dans les parcelles R

J'aimerais ajouter LaTeX la composition aux éléments des tracés dans R (par exemple: le titre, les libellés d'axe, les annotations, etc.) en utilisant soit la combinaison de base/lattice ou avec ggplot2.

Questions:

  • Existe-t-il un moyen d'intégrer LaTeX dans les graphiques utilisant ces packages, et si oui, comment cela se fait-il?
  • Sinon, y a-t-il des paquets supplémentaires nécessaires pour accomplir cela?.

Par exemple, dans Python matplotlib _ compile LaTeX via le text.usetex paquets tels que discutés ici: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Existe-t-il un processus similaire permettant de générer de telles parcelles dans R?

114
DrewConway

Voici un exemple utilisant ggplot2:

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

alt text

45
Christopher DuBois

En tant que volé de ici , la commande suivante utilise correctement LaTeX pour dessiner le titre:

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

Voir ?plotmath pour plus de détails.

33
Christopher DuBois

Le package CRAN latex2exp contient une fonction TeX qui traduit les formules LaTeX en expressions plotmath de R. Vous pouvez l'utiliser n'importe 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 cette parcelle .

27
Stefano Meschiari

Vous pouvez générer du code tikz à partir de R: http://r-forge.r-project.org/projects/tikzdevice/

15
Mica

Voici quelque chose de mes propres rapports de laboratoire.

  • tickzDevice exporte tikz images pour LaTeX
  • Notez que dans certains cas "\\" devient "\" et "$" devient "$\" comme dans le code R suivant: "$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • De plus, xtable exporte les tables en 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
6
N8TRO

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 ici:

    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)
4
mwrowe

Je l'ai fait il y a quelques années en générant en sortie au format .fig plutôt que directement au format .pdf; vous écrivez les titres, y compris le code latex, et utilisez fig2ps ou fig2pdf pour créer le fichier graphique final. La configuration que j’avais à faire a rompu avec R 2.5; si je devais le refaire, j'examinerais plutôt tikz, mais je l'inclue ici de toute façon comme une autre option potentielle.

Mes notes sur la manière dont je l’ai fait en utilisant Sweave sont ici: http://www.stat.umn.edu/~arendahl/computing

2
Aaron

J'ai juste une solution de contournement. On peut d’abord générer un fichier eps, puis le reconvertir en pgf en utilisant l’outil eps2pgf. Voir http://www.texample.net/tikz/examples/eps2pgf/

0
Xin Guo

h <- rnorm(mean = 5, sd = 1, n = 1000) hist(h, main = expression(paste("Sampled values, ", mu, "=5, ", sigma, "=1")))

Tiré d'un article très utile ici https://stats.idre.ucla.edu/r/codefragments/greek_letters/

0
Steve Walsh