2

我对 knitr 的某些行为感到有些困扰。工作示例应显示 4 个图,所有图均使用 2 种不同的绘图方法显示相同的数据。

前言:

\documentclass{article}

前两个图是使用 R-base 的 plot 命令制作的:

<<one.one,fig.width=4,fig.height=3,fil.align='center',fig.show='asis'>>=
par(mar=c(4,4,1,1),mgp=c(2,1,0),cex=0.8)
plot(cars,pch=20,col='darkgray')
@
<<one.two,fig.width=4,fig.height=3,fil.align='center',fig.show='asis'>>=
par(mar=c(4,4,1,1),mgp=c(2,1,0),cex=0.8)
plot(cars,pch=18,col='darkgray')
@

然后输出由(删除)给出:

对于与 ggplot2 相同的图,代码示例是:

<<two.one,fig.width=4,fig.height=3,fil.align='center',fig.show='asis'>>=
library(ggplot2)
test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red')
test3
@
<<two.two,fig.width=4,fig.height=3,fil.align='center',fig.show='asis'>>=
test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red',shape=3)
test3
@

输出为(已删除):

即使使用 tikzDevice 也不能解决我的问题。这个问题自去年 11 月以来就存在于我身上,至少在我记忆中是这样。我尝试通过阅读 Yihui Xie 的书来解决,使用了他网站上的示例,但失败了。

那么:有没有人遇到过同样的问题并提出了解决方案?即使是指向某个方向的提示也可能会有所帮助。

我的系统:

Win 7,MikTeX2.9(软件包更新于 2016 年 1 月 15 日),TeXstudio 2.10.6,R3.2.2(软件包更新于 2016 年 1 月 15 日)。


编辑:

根据 CL 的要求,我也立即更新了 R 和软件包。您可以在下面找到我的 MWE。使用 pch=20 时不显示数据点的问题;pch=19,只要我不明确选择图形设备,geom_point() 就会一直存在。使用tikzDevice并将绘图保存到 *.tex 时,会显示数据点。当将 dev='tikz' 放入块选项时,它们也会显示。其他图形设备似乎也可以工作。

MWE是:

\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\begin{document}

\begin{verbatim}
this chunk options:

fig.width=4,fig.height=3,fig.align='center',fig.show='asis'
\end{verbatim}

<<one.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis'>>=
library(knitr)

par(mar=c(4,4,1,1),mgp=c(2,1,0),cex=0.8)
plot(cars,pch=20,col='darkgray')
fit<-lm(dist~speed, data=cars)
abline(fit,lwd=1,col='red')

par(mar=c(4,4,1,1),mgp=c(2,1,0),cex=0.8)
plot(cars,pch=18,col='darkgray')
fit<-lm(dist~speed, data=cars)
abline(fit,lwd=1,col='red')

library(ggplot2)
test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red')
test3

test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red',shape=3)
test3
@

\begin{verbatim}
next chunk options:

three.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis'
\end{verbatim}

<<three.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis'>>=
require(tikzDevice)
tikz("three.one.tex",width=4.2,height=3)
plot(cars,pch=20,col='darkgray')
fit<-lm(dist~speed, data=cars)
abline(fit,lwd=1,col='red')
dev.off()

tikz("four.one.tex",width=4.2,height=3)
test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red')
test3
dev.off()
@
\input{three.one.tex}

\input{four.one.tex}

\begin{verbatim}
next chunk options:

five.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis, dev='tikz'
\end{verbatim}

<<five.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis',dev='tikz'>>=
plot(cars,pch=20,col='darkgray')
abline(fit,lwd=1,col='red')

test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red')
test3
@

\begin{verbatim}
next chunk options:

five.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis, dev=c('png','pdf')
\end{verbatim}

<<seven.one,fig.width=4,fig.height=3,fig.align='center',fig.show='asis',dev=c('png', 'pdf')>>=
plot(cars,pch=20,col='darkgray')
abline(fit,lwd=1,col='red')

test1<-ggplot(cars,aes(x=speed,y=dist))
test2<-test1+geom_smooth(method="lm",se=FALSE,color='red',data=fit)
test3<-test2+
ggtitle("") +
geom_point(size=1,colour='red')
test3
@
\end{document}

如果该问题无法重现,我将与它和平相处并忽略它。但如果它是可重现的,我很好奇解决方案会是什么样子。

除了测试之外,我还发现了另一个问题,我发现至少还有一个其他 TeX 用户也提到了这个问题:Knitr 和 LaTeX 包 xcolor 似乎并不是所有朋友中最好的。

再次感谢。

knitr 与 xcolor

4

0 回答 0