我想在bookdown文档中添加TikZ图形,以便包含一些精美的图形。
我的主要输出格式是LaTeX,这意味着我基本上可以在Rmarkdown文件中逐字包含TikZ图形,并且可以很好地呈现。但是,有两个问题困扰着我:
现在,我有以下块,当我将其渲染为pdf时,可以很好地生成相关图形。
```{r, echo=FALSE, engine='tikz', out.width='90%', fig.ext='pdf', fig.cap='Some caption.'}
\begin{tikzpicture}[scale=.7]
\draw [fill=gray!30,very thick] (0,-1) rectangle (5,1);
\draw [very thick] (5, 0) -- (13,0);
\node [below] at (2,-1) {\large Hello};
\node [below, align=center] at (0,-1) {\large Two\\ lines};
\end{tikzpicture}
```
Run Code Online (Sandbox Code Playgroud)
但是,代码有两个问题:
knitr和bookdown)。但是,我确实获得了图形标题,如果我渲染到html_document它,那么它也可以工作,并且我可以看到图形。如果还有其他方法可以将TikZ代码作为图形环境的一部分包含在内,那么我很高兴知道。
更新:我猜第二点可以通过设置文件中engine.opts = list(template = "latex/tikz2pdf.tex")包含LaTeX的必要设置的位置来解决tikz2pdf.tex。该文件是使用LaTeX读取的,但xelatex由于要使用fontspecLaTex软件包,因此我想使用该文件进行解析。仍然可以更改吗?
我使用 R 分析数据,使用 ggplot 创建绘图,使用 tikzDevice 打印它们,最后使用 Latex 来创建报告。问题是由于乳胶的内存限制,具有许多点的大图会失败。我在这里找到了https://github.com/yihui/tikzDevice/issues/103一个在打印 tikz 文件之前光栅化绘图的解决方案,它允许单独打印点和文本。
require(png)
require(ggplot2)
require(tikzDevice)
## generate data
n=1000000; x=rnorm(n); y=rnorm(n)
## first try primitive
tikz("test.tex",standAlone=TRUE)
plot(x,y)
dev.off()
## fails due to memory
system("pdflatex test.tex")
## rasterise points first
png("inner.png",width=8,height=6,units="in",res=300,bg="transparent")
par(mar=c(0,0,0,0))
plot.new(); plot.window(range(x), range(y))
usr <- par("usr")
points(x,y)
dev.off()
# create tikz file with rasterised points
im <- readPNG("inner.png",native=TRUE)
tikz("test.tex",7,6,standAlone=TRUE)
plot.new()
plot.window(usr[1:2],usr[3:4],xaxs="i",yaxs="i")
rasterImage(im, usr[1],usr[3],usr[2],usr[4])
axis(1); axis(2); box(); title(xlab="x",ylab="y")
dev.off()
## this works
system("pdflatex test.tex")
## now with ggplot
p …Run Code Online (Sandbox Code Playgroud) 我一直在尝试遵循这个小插图,了解如何为多个 ggplot2 制作共享图例。给定的示例按原样完美运行,但就我而言,我使用 tikzDevice 导出tikzpicture环境。主要问题似乎是图例键的宽度未被正确捕获grid_plot。
我想出了一个最小的 R 代码来重现该问题:
require(ggplot2)
require(grid)
require(gridExtra)
require(cowplot)
require(tikzDevice)
tikz(file = "./tmp.tex", width = 5.6, height = 2.2, standAlone = T )
mpg2 <- mpg
mpg2$cyl = as.factor(mpg2$cyl)
levels(mpg2$cyl) <- c("\\textbf{\\textsc{four}}",
"\\textbf{\\textsc{five}}",
"\\textbf{\\textsc{six}}",
"\\textbf{\\textsc{seven}}",
"\\textbf{\\textsc{eight}}")
plot.mpg <- ggplot(mpg2, aes(x=cty, colour=cyl, y = hwy)) +
geom_point() +
theme(legend.position='none')
legend <- get_legend(plot.mpg + theme(legend.position = "top"))
print(plot_grid(legend,
plot.mpg, nrow=2, ncol=1,align='h',
rel_heights = c(.1, 1)))
dev.off()
Run Code Online (Sandbox Code Playgroud)
生成的 PDF 文件(编译 tmp.tex 后)如下所示:
正如我们所观察到的,第一个图例键(四)仅部分显示,图例键(八)完全不可见。我尝试更改tikz …
我想知道tikzdevice包是否可以用于在 RMarkdown 中生成 R 图,并导出到投影仪演示文稿。
我本以为我正在寻找的解决方案可能类似于tikzdevice 手册第 15 页上的 Sweave 示例。
我在不知道自己在做什么的情况下尝试过修改 RMarkdown 书中 Yihui 的示例:
---
title: "Habits"
author: John Doe
date: March 22, 2005
output: beamer_presentation
---
# In the morning
## Getting up
- Turn off alarm
- Get out of bed
---
```{r, echo=FALSE, results='tex'}
require(tikzDevice)
tikz(console=TRUE)
plot(sin, -pi, 2*pi, main="A Stand Alone TikZ Plot")
dummy <- dev.off()
```
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会导致 tikz 图在投影仪演示文稿中呈现。有谁知道如何实现这一点?谢谢。
问候,迈克尔
tikzdevice ×4
r ×3
ggplot2 ×2
r-markdown ×2
beamer ×1
bookdown ×1
cowplot ×1
knitr ×1
rasterizing ×1