Introduire du LaTeX dans les parcelles R
je voudrais ajouter LaTeX
composition d'éléments de parcelles dans R
(E. g: le titre, les étiquettes axis, les annotations, etc.) utilisant soit la combinaison de base/lattice
soit avec ggplot2
.
Questions:
- y a-t-il un moyen d'introduire
LaTeX
dans les parcelles en utilisant ces paquets, et si oui, comment le faire? - dans la négative, des colis supplémentaires sont-ils nécessaires? pour accomplir cette tâche.
par exemple, dans Python matplotlib
compiles LaTeX
via les paquets text.usetex
comme discuté ici: http://www.scipy.org/Cookbook/Matplotlib/UsingTex
Existe-t-il un processus similaire permettant de générer de telles parcelles dans R
?
8 réponses
voici un exemple d'utilisation de ggplot2
:
q <- qplot(cty, hwy, data = mpg, colour = displ)
q + xlab(expression(beta +frac(miles, gallon)))
Comme volé ici , la commande suivante utilise correctement LaTeX pour dessiner le titre:
plot(1, main=expression(beta[1]))
voir ?plotmath
pour plus de détails.
ce script contient une fonction latex2exp
pour traduire approximativement les formules LaTeX aux expressions plotmath de R. Vous pouvez l'utiliser n'importe où vous pourriez entrer des annotations mathématiques, telles que des étiquettes axis, 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=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)
produit cette parcelle .
vous pouvez générer du code tikz à partir de R: http://r-forge.r-project.org/projects/tikzdevice/
voici quelque chose de mes propres rapports de laboratoire.
-
tickzDevice
exportationstikz
imagesLaTeX
-
Note, que dans certains cas
"\"
devient"\"
et"$"
devient"$\"
comme dans le code R suivant:"$z\frac{a}{b}$" -> "$\z\frac{a}{b}$\"
"
-
Aussi xtable exportations des tables de 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
Voici une fonction cool qui vous permet d'utiliser la fonctionnalité plotmath, mais avec les expressions stockées comme objets du mode caractère. Cela vous permet de les manipuler programmatiquement en utilisant des fonctions de coller ou d'expression régulière. Je n'utilise pas ggplot, mais il devrait fonctionner là aussi:
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)
j'ai fait ça il y a quelques années en sortant à A.format fig au lieu de directement à A.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'ai eu pour faire ceci a cassé avec R 2.5; si je devais le faire à nouveau, je regarderais dans tikz à la place, mais je l'inclus ici de toute façon comme une autre option potentielle.
mes notes sur la façon dont je l'ai fait en utilisant Sweave sont ici: http://www.stat.umn.edu/~arendahl/informatique
j'ai juste une solution. On peut d'abord générer un fichier eps, puis le convertir de nouveau en pgf en utilisant l'outil eps2pgf. Voir http://www.texample.net/tikz/examples/eps2pgf/