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:
LaTeX
dans les graphiques utilisant ces packages, et si oui, comment cela se fait-il?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
?
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.
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 .
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
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
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)
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
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/
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/