将LaTeX放入R图


119

我想使用以下任一组合将LaTeX排版设置添加到绘图的元素中R(例如:标题,轴标签,注释等)base/lattice或用ggplot2

问题:

  • 有没有办法 LaTeX使用这些软件包进入地块,如果可以,怎么做?
  • 如果没有,是否需要其他软件包来完成此操作。

例如,通过此处讨论的软件包进行Python matplotlib编译:http : //www.scipy.org/Cookbook/Matplotlib/UsingTexLaTeXtext.usetex

是否有类似的过程可以用来生成此类图R


1
本教程可能对您有用
Pragyaditya Das

这个将LaTeX渲染成图表的软件包可能会有所帮助:github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Answers:



35

这里偷来的以下命令正确使用LaTeX绘制标题:

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

请参阅?plotmath以获取更多详细信息。


12
demo(plotmath)有趣也不错,因此必须通过plotmath的语法重新解释数学符号吗?这似乎是光阴的时间浪费,特别是如果您有涉及LaTeX表达式的话。这就是为什么我喜欢matplotlib编译LaTeX本身的能力的原因。是否可以使用LaTeX并生成plotmath语法?
DrewConway

从来没听说过。这里有一个有趣的帖子在RWiki有关获取乳胶工作与GGPLOT2:wiki.r-project.org/rwiki/...
克里斯托弗·迪布瓦

34

CRAN软件包latex2exp包含一个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('$\\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)

产生这个情节


这很棒!您能大致解释一下您的意思吗?这是如何运作的?
弗朗斯·罗登堡

1
大致来说,我的意思是将LaTeX字符串转换为R的plotmath表达式-这意味着,如果plotmath不支持特定的LaTeX符号,则将不会渲染它,或者将其组合为可用符号来渲染。
Stefano Meschiari '19年

虽然不是很好。看起来很恶心,它仅支持有限数量的符号。更糟糕的是,似乎没有任何东西可以帮助“出版质量”图(人们错误地认为R能够做到这一点)。时间学习Python我想..
藻类


6

这是我自己的实验室报告中的内容。

  • tickzDevice导出tikz图像LaTeX
  • 注意,在某些情况下"\\"变得"\""$"成为"$\"如下述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

4

这是一个很酷的功能,可让您使用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)

2

几年前,我通过输出为.fig格式而不是直接输出为.pdf来完成此操作;您编写包括乳胶代码的标题,并使用fig2ps或fig2pdf创建最终的图形文件。我要做的设置是R 2.5;如果我不得不再次这样做,我会去研究tikz,但是无论如何我还是把它包括在这里作为另一个可能的选择。

有关如何使用Sweave进行操作的注释,请参见http : //www.stat.umn.edu/~arendahl/computing



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.