将LaTeX变成R图
我想添加LaTeX
排版元素的R
(例如:标题,轴标签,注释等)的元素使用base/lattice
或ggplot2
的组合。
问题:
- 有没有办法让
LaTeX
使用这些软件包进行绘图,如果是的话,它是如何完成的? - 如果没有,是否有额外的软件包来完成这一点。
例如,在Python matplotlib
通过text.usetex
包编译LaTeX
,如下所述: http : //www.scipy.org/Cookbook/Matplotlib/UsingTex
有没有类似的过程,可以在R
产生这样的情节?
这是一个使用ggplot2
的例子:
q <- qplot(cty, hwy, data = mpg, colour = displ) q + xlab(expression(beta +frac(miles, gallon)))
替代文字160wpb4.png
从这里被盗,下面的命令正确使用LaTeX来绘制标题:
plot(1, main=expression(beta[1]))
有关更多详细信息,请参阅?plotmath
。
该脚本包含一个函数latex2exp
用于将LaTeX公式近似转换为R的plotmathexpression式。 您可以在任何可以inputmath注释的地方使用它,例如轴标签,图例标签和一般文本。
例如:
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)
产生这个情节 。
你可以从R生成tikz代码: http ://r-forge.r-project.org/projects/tikzdevice/
这里有一个很酷的函数,可以让你使用plotmathfunction,但将expression式存储为字符模式的对象。 这使您可以使用粘贴或正则expression式函数以编程方式操作它们。 我不使用ggplot,但它也应该在那里工作:
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)
这是我自己的实验报告中的一些内容。
-
tickzDevice
为LaTeX
导出tikz
图像 -
请注意,在某些情况下,
"\\"
变成"\"
,"$"
变成"$\"
如下面的R代码所示:"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"
-
另外xtable将表格导出到latex代码
代码:
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
几年前,我通过输出为.fig格式而不是直接输出为.pdf。 你写的标题包括乳胶代码,并使用fig2ps或fig2pdf来创build最终的graphics文件。 我不得不这样做的设置打破了2.5; 如果我不得不再做一次,我会考虑tikz,但是,无论如何,这里也包括这个作为另一个潜在的select。
我关于如何使用Sweave的笔记在这里: http : //www.stat.umn.edu/~arendahl/computing
我只是有一个解决方法。 可以先生成一个eps文件,然后使用eps2pgf工具将其转换回pgf。 请参阅http://www.texample.net/tikz/examples/eps2pgf/