12

我遇到以下代码片段的问题:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{myscatterplot.pdf}
\end{document}

其中“myscatterplot.pdf”由 R 中的以下代码生成:

library(scatterplot3d)
pdf("myscatterplot.pdf")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

问题是使用 texworks (pdfLatex+makeindex+bibtex) 编译时生成的 LaTeX 文档具有图形轴,但绘图或轴标签中没有任何点(在这种情况下,它只是 3d 轴本身)。R 或 LaTeX 不会输出错误或警告消息。我在用:

  • Windows 7 上的 R 2.12.1,
  • MiKTeX 2.8,
  • TeXworks
  • Adobe Reader 9(不确定这是否相关......)

我已经能够使用 \includegraphics 命令来包含该图的 png 版本,并且使用 adobe 打开“myscatterplot.pdf”会显示我想要在我的文档中的图。

我曾尝试使用 tikz 包作为解决方法,但似乎 scatterplot3d 生成的信息太多,由于内存大小(错误(我的实际绘图将有 10000 + 点! )。

我怀疑问题出在“.pdf”文件中的字体,但我尝试使用更改 pdf 字体

pdf("changefont.pdf")
par(family = "Helvetica")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

使用 \includegraphics(changefont.pdf) 时的结果完全相同。

我正在考虑的另一个可能的问题是,也许 scatterplot3d 输出实际上是多个图像,而 \includegraphics 只是从 pdf 文件中获取第一个数字(轴)。在这种情况下,我仍然不确定如何解决它。

我真的很感激一个解决方法,因为我最终想用 Sweave 完成所有这些,这让我对包的其他漂亮输出感到痛苦!

预先感谢您的回复。

编辑1:

因此,第一个建议是使用 EPS 格式而不是 pdf。这产生了一些结果,但不是我想要的。我运行了以下内容:

\documentclass{article}
\usepackage{graphicx,epstopdf}
\begin{document}
\begin{figure}
\includegraphics[angle = 270, width= 6in, keepaspectratio=true]{change.eps}
\end{figure}
\end{document}

我使用生成“change.eps”

postscript("change.eps")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

确实产生了改进(尽管奇怪的是,它在乳胶输出中将图顺时针旋转了 90 度!),我现在在我的乳胶输出中有了散点图中的轴和点!但是,轴标签仍然不在图中,即使我已经使用 ghostview 打开了“change.eps”,并且轴在图中!scatterplot3d 输出数字的方式似乎与 \includegraphics 搜索数字的方式不一致......

因此,我仍在寻找包含轴标签的解决方案。

4

6 回答 6

5

查看使用您列出的命令生成的 myscatterplot.pdf,轴和标签就在那里。但是,pdf 相当大(7 英寸 x 7 英寸)。

如果您使用 pdf() 的重量/高度参数,它会有所帮助吗?

pdf("myscatterplot.pdf", height=3.5, width=3.5)
于 2011-01-24T10:12:59.503 回答
4

这是一个与 LaTeX 超出其可用内存有关的旁注。

我刚刚将您的示例与 tikzDevice 一起使用来进行一些压力测试,看起来结果很大程度上取决于使用的 TeX 引擎。特别值得注意的是luatex的继承者pdftex,它被证明能够处理具有许多图形元素的图。

  • pdflatex

    闯过1000分的剧情,超过记忆力死10000。

  • xelatex

    也超过了记忆力,10000点就死了。

  • lualatex

    在约 45 秒内浏览 10,000 个点并生成一个 1 MB 的 PDF 文件。在约 7.5 分钟内通过 100,00 个点(一个 10 MB 的输入文件),吐出一个 8.5 MB 的 PDF 文件,并以约 750 MB 的内存使用量达到峰值。没有尝试 100 万的基准。

当程序启动时,它看起来pdftexxetex预先分配了所有内存,这就是他们将得到的全部。luatex另一方面,它似乎可以动态分配内存,因此只会受到可用 RAM 数量的限制。

所以,如果pdflatex是给你“内存不足”的错误,试着试一试lualatex


这些测试是使用 TeX Live 2010 发行版中包含的 TeX 编译器完成的。我也是 tikzDevice 的作者之一

于 2011-04-18T02:27:18.720 回答
3

您可以尝试 Sweave: http: //www.statistik.lmu.de/~leisch/Sweave/(Sweave 是一个工具,它允许在乳胶文档中嵌入 R 代码以进行完整的数据分析)

于 2011-01-24T11:00:12.217 回答
1

如果您想将 pdf 图像插入文件,我认为您必须使用 pdflatex 而不是标准乳胶。如果没有安装,我会尝试从 R 生成 eps 格式的数字,而不是 pdf。

于 2011-01-24T03:15:37.937 回答
1

我记得在类似的问题上苦苦挣扎。不记得我是否能在图中看到标签。回顾代码,我在 R 级别修改了两个参数:

par(xpd=NA)
par(oma=c(3, 3, 0, 0))

也用于附言,以免图形旋转 90 度:

postscript(file="xx.eps", horizontal=FALSE)

高温高压

于 2011-01-24T08:45:08.073 回答
1

我实际上是带着完全相同的问题来到这里的(TexWorks、pdfLatex、Windows 7)。我发现了一些有趣的东西:当我第一次启动 Latex 时,数字出现了轴和所有,当我重新运行 pdfLatex 时,轴又消失了。这给了我一种预感,我想通了:即使乳胶预览不显示轴,PDF 格式也可以。而且您甚至不必告诉\includegraphics命令图形是 PDF 格式。

pdf("C:/Users/Orr/Documents/Leiden University/Master thesis/Chapters/Images/bioRes/Boxplots mouse raw data.pdf")
boxplot(mouse_data_raw,main="Mouse raw data")
dev.off()

\begin{figure}[t]
\includegraphics[scale=0.5]{mouse-box-raw}
\includegraphics[scale=0.5]{human-box-raw}
\end{figure}
于 2011-09-11T14:04:44.503 回答