在轴标签中使用数学表达式

17
在R中,我使用expression(theta[l])来使我的图表轴标签与LaTeX中的$\theta_l$相同。出于美学原因,我更愿意显示$\theta_\ell$。你能帮我吗?

enter image description here


编辑

以前,我做过这样的操作

plot(1:10, 1:10, xlab=expression(theta[l]))

我将生成的图片导出为pdf文件。然后,使用

\begin{figure}[htbp]
\centerline{\includegraphics[scale=.6]{test.pdf}}
\end{figure}

我的照片被插入到LaTeX中。

根据评论,这是我现在所做的事情:

require(tikzDevice)
tikz("test.tex", standAlone=TRUE, width=5, height=5)

plot(1:10, 1:10, xlab="$\\theta_\\ell$")

dev.off()
tools::texi2pdf('test.tex')
system(paste(getOption('pdfviewer'),'test.pdf'))

然而,当我将生成的图表插入到LaTeX中时,图像质量不如以前那么好。我还能做些什么吗?


@agstudy:Windows。对我来说,Linux也可以。 - Marco
@Sven Hohenstein:谢谢你的图片 :-) - Marco
2
这是您要找的吗?链接 - plannapus
@plannapus:嗯,有趣!我会调查一下那个包 :-) - Marco
这个适用于cairo_pdfplot(1:10, main ="\u2113")。编辑:我刚意识到你想要theta_ell,那可能没有帮助... - Jouni Helske
4个回答

9

对于这样一个简单的问题,真的没有理由使用像 'tikzDevice' 这样 可能已经不再维护 的软件包。'tikz' 设备的问题之一是它似乎不能正确接受指定绘图分辨率的 'xpinch' 和 'ypinch' 参数。

添加LaTEX符号到绘图中存在更大的问题,但对于此局部问题,关键在于指定字体以使基本的 'plotmath' 软件包为您显示草书字母。

您可以通过将其与绘图命令分开并在 'title' 函数内选择自定义字体来更改 x 轴标签的字体,例如:

plot(1:10, 1:10, xlab="")
windowsFonts(script=windowsFont("Script MT Bold"))
title(xlab=expression(theta[l]), family="script")

我们所做的是在绘图命令中为x轴指定一个空标签,以先腾出空间。然后,我们加载系统字体到可用字体系列中(我喜欢Script MT Bold用于表达式)。最后,我们可以使用“title”函数来绘制x轴标签并指定该标签中任何文本的字体系列。通过这样做,我们保留了绘图设备的所有原始功能,因此将其转换为PDF时不再会降低分辨率。

demo of chart

现在,如果有人能够提供一个好的解决方案来解决“tikzDevice”软件包之外的LaTEX符号问题,我会很乐意听取。我所知道的唯一有效的方法是翻转模型并使用“tikz”LaTEX软件包从LaTEX文件中手动绘制整个图形,或者使用“pixmap”R软件包在图表上绘制表达式的图像。但两种方法都不完美。

我们在哪里找到“windowsFonts”? - Marco
这些是安装在您系统上的字体。您只需使用字体名称,就像它在计算机上注册的那样。在Windows计算机上,您可以使用字符映射应用程序(系统工具)。 - Dinre
2
windowsFonts 是一个函数,可以显示交互式图形设备当前可用的字体映射,并可用于分配新的映射。显然,它只在 Windows 上可用。在 Mac 上有相应的函数 (quartzFonts),在 Nix 上有 ("X11Fonts)。 - IRTFM
1
我觉得它正在维护中。当我检查时,它已经在2015-01-07进行了更新。 - Ziyuan

3

我认为tikzDevice是这里的最佳选择。你可以从R-forge安装。

install.packages("tikzDevice", repos="http://R-Forge.R-project.org")
The tikz/pgf的理念是创建可排版的图形。您可能希望这些图形与您的文档保持一致,例如使用相同的软件包、字体、字号等。 您可以通过在tikz调用中设置选项来设置这些内容,例如文档声明。
options(tikzDocumentDeclaration = "\\documentclass[10pt]{article}")

软件包

tikzLatexPackages(或类似的)

您还可以控制字体大小。

所有这些内容都在?tikzDevice中详细说明。


您还可以使用knitr在可读性强的编程文档(.rnw)中创建图表。

在这种情况下,使用tikz设备创建一个pdf文件(external = TRUE),并使用与整个文档相同的声明、头部和软件包。

\documentclass[12pt,a4paper]{article}

\begin{document}

<<setup, include = FALSE>>=
opts_chunk$set(dev = 'tikz', external = TRUE)
@


<<myplot, fig.width=5, fig.height = 5, echo=FALSE>>=
plot(1:10, 1:10, xlab="$\\theta_\\ell$")
@

\end{document}

如果您正在Mac(或Windows)上安装,您可能需要安装适当的工具包并使用以下命令:install.packages("tikzDevice", repos="http://R-Forge.R-project.org") - IRTFM

1
我在这里找到了一个解决方法(这里)。他们讲解了一个冗长的过程,以使编码适用于标准pdf设备。否则,可以通过安装 Cairo 软件包来使用 CairoPDF 设备。然后使用 @Julián Urbano 的解决方案,像 xlab="\u2113" 这样的内容将显示在 pdf 中。在表达式中使用此字符时,我没有取得任何成果。

1

这是一种有点“肮脏”的解决方案,但它可以实现:

plot(1,1, xlab=expression(theta))
title(xlab="    \u2113",line=3.2,cex.lab=.7)

首先使用theta符号绘制图形。然后添加小字体的\ell符号,并手动设置位置。

enter image description here


@carelus:谢谢。当图像以PDF格式导出时,它是否仍然显示为\ell? - Marco
2
刚刚检查了一下,显然不行 :-( - Julián Urbano
1
行为将取决于pdf查看器的字体映射。在Mac上使用Preview.app作为查看器时,它会显示相同的草书字母“l”。您的查看器需要有适当的符号字体才能获得相同的行为,我认为Windows查看器通常没有正确设置。 - IRTFM
@Dwin:感谢您的精准回答。您对Windows上的PDF阅读器有什么推荐吗? - Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接