将 LaTeX 导入 R 图

我想添加 LaTeX排版元素的情节在 R(例如: 标题,轴标签,注释,等等)使用 base/lattice或与 ggplot2的组合。

问题:

  • 有没有一种方法可以使用这些包将 LaTeX绘制成图,如果有,是如何完成的?
  • 如果没有,是否需要额外的软件包来实现这一点。

例如,在 Python matplotlib中,通过这里讨论的 text.usetex包编译 LaTeX: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

R中是否有类似的方法可以生成这样的图?

113283 次浏览

作为从 给你偷来的,下面的命令正确地使用 LaTeX 来绘制标题:

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

有关详细信息,请参阅 ?plotmath

下面是一个使用 ggplot2的例子:

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

alt text

几年前,我通过输出到。图格式,而不是直接转换为。你写的标题包括乳胶代码和使用图2ps 或图2pdf 来创建最终的图形文件。我必须这样做的设置打破了 R 2.5; 如果我不得不再次这样做,我会看看 tikz 代替,但无论如何包括这里作为另一个潜在的选择。

我如何使用 Sweave 做到这一点的笔记在这里: http://www.stat.umn.edu/~arendahl/computing

这是我自己的实验报告。

  • tickzDeviceLaTeX导出 tikz图像
  • 注意,在某些情况下,"\\"变成 "\""$"变成 "$\",如下面的 R 代码所示: "$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Xtable 还将表导出到乳胶代码

密码:

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

这里有一个很酷的函数,可以让你使用 plotmath 功能,但是表达式存储为字符模式的对象。这使您可以使用粘贴或正则表达式函数以编程方式操作它们。我没有使用 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)

我有个办法。可以首先生成一个 ep 文件,然后使用工具 eps2pgf 将其转换回 pgf。参见 http://www.texample.net/tikz/examples/eps2pgf/

CRAN 包 latexp 包含一个 TeX函数,该函数将 LaTeX 公式转换为 R 的 plotmath 表达式。您可以在任何可以输入数学注释的地方使用它,例如轴标签、图例标签和一般文本。

例如:

x <- seq(0, 4, length.out=100)
alpha <- 1:5


plot(x, xlim=c(0, 4), ylim=c(0, 10),
xlab='x', ylab=TeX(r'($\alpha  x^\alpha$, where $\alpha \in \{1 \ldots 5\}$)'),
type='n', main=TeX(r'(Using $\LaTeX$ for plotting in base graphics!)', bold=TRUE))


for (a in alpha) {
lines(x, a*x^a, col=a)
}


legend('topleft',
legend=TeX(sprintf(r'($\alpha = %d$)', alpha)),
lwd=1,
col=alpha)

产生 这个阴谋

H <-r 范数(平均值 = 5,sd = 1,n = 1000) (h,main = expression (粘贴(“样本值,”,mu,“ = 5,”,sigma, “ = 1”))

摘自这里的一篇非常有帮助的文章 https://stats.idre.ucla.edu/r/codefragments/greek_letters/