2016-12-05 7 views
1

(воспроизводимый код) Я изучаю Ugarte2016 «Вероятность и статистика с R» 2E. Следующий код запускается в R, но Latex-подобный код не обрабатывается. Кажется, что код внутри "$...$" не обрабатывается. Код, приведенный ниже, был написан авторами книги. Кажется, проблема как-то. В чем может быть проблема?Латексные коды не обрабатывались (греческие буквы и т. Д. Не показаны) на графике в R

######### Chapter 12 ############# 
library(PASWR2); library(ggplot2); library(car); library(scatterplot3d) 
library(gridExtra); library(multcomp); library(leaps); library(MASS) 
################ Figure 12.1 ###############  
opar <- par(no.readonly = TRUE) # copy of current settings 
par(mar=c(2, 14, 2, 1), las = 1) 
DF <- data.frame(x = c(1, 4, 9), y = c(1, 4, 9)) 
plot(y~x, data = DF, xaxt = "n", yaxt = "n", xlim = c(0, 12), ylim = c(-2, 12), xlab = "", ylab = "", type = "n") 
abline(lm(y~x, data = DF), lwd = 2) 
axis(side =1, at =c(1, 4, 10), labels = c("$x_1$", "$x_2$", "$x_3$")) 
axis(side =2, at =c(1, 4, 10), labels = c("$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$")) 
segments(1, -2, 1, 2.5, lty = "dashed") 
segments(0, 1, 1 + 0.75, 1, lty = "dashed") 
segments(4, -2, 4, 5.5, lty = "dashed") 
segments(0, 4, 4 + 0.75, 4, lty = "dashed") 
segments(10, -2, 10, 11.5, lty = "dashed") 
segments(0, 10, 10 + 0.75, 10, lty = "dashed") 
ys <- seq(-1.5, 1.5, length = 200) 
xs <- dnorm(ys, 0, 0.5) 
lines(xs + 1, ys + 1, type = "l",lwd = 2) 
lines(xs + 4, ys + 4, type = "l",lwd = 2) 
lines(xs + 10, ys + 10, type = "l",lwd = 2) 
text(7.8, 5.5, "$E(Y|x) = \\beta_0 + \\beta_1x$") 
arrows(8, 5.7, 7, 7, length = 0.1, lwd = 2) 
par(opar) 

Результат Код: enter image description here

Изображение в книге: enter image description here

+0

Возможно, они использовали tikzDevice? – baptiste

+0

По вашему совету, я установил и создал 'library (tikzDevice)'. затем снова запустите код. Он появился в окне «R Graphics: Device». Мне не удалось заставить его появиться на устройстве 'tikzDevice'. Таким образом, не может быть подтверждена, связана ли проблема с неиспользованием устройства 'tikzDevice'. –

+0

вам нужно будет использовать устройство 'tikz()' и обрабатывать его через LaTeX – baptiste

ответ

4

Использование пакета latex2exp:

######### Chapter 12 ############# 
library(PASWR2); library(ggplot2); library(car); library(scatterplot3d) 
library(gridExtra); library(multcomp); library(leaps); library(MASS) 
library(latex2exp) 
################ Figure 12.1 ###############  
opar <- par(no.readonly = TRUE) # copy of current settings 
par(mar=c(2, 14, 2, 1), las = 1) 
DF <- data.frame(x = c(1, 4, 9), y = c(1, 4, 9)) 
plot(y~x, data = DF, xaxt = "n", yaxt = "n", xlim = c(0, 12), ylim = c(-2, 12), xlab = "", ylab = "", type = "n") 
abline(lm(y~x, data = DF), lwd = 2) 
axis(side =1, at =c(1, 4, 10), labels = TeX(c("$x_1$", "$x_2$", "$x_3$"))) 
axis(side =2, at =c(1, 4, 10), labels = TeX(c("$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$"))) 
segments(1, -2, 1, 2.5, lty = "dashed") 
segments(0, 1, 1 + 0.75, 1, lty = "dashed") 
segments(4, -2, 4, 5.5, lty = "dashed") 
segments(0, 4, 4 + 0.75, 4, lty = "dashed") 
segments(10, -2, 10, 11.5, lty = "dashed") 
segments(0, 10, 10 + 0.75, 10, lty = "dashed") 
ys <- seq(-1.5, 1.5, length = 200) 
xs <- dnorm(ys, 0, 0.5) 
lines(xs + 1, ys + 1, type = "l",lwd = 2) 
lines(xs + 4, ys + 4, type = "l",lwd = 2) 
lines(xs + 10, ys + 10, type = "l",lwd = 2) 
text(7.8, 5.5, TeX("$E(Y|x) = \\beta_0 + \\beta_1x$")) 
arrows(8, 5.7, 7, 7, length = 0.1, lwd = 2) 
par(opar) 

enter image description here

+0

Это сработало. Я установил указанный вами пакет и сделал 'library (latex2exp)', как вы предложили. Затем, после повторного запуска кода, сюжет появился так же, как в книге. Мириады спасибо ... –

2

Все графы в книге были созданы работы опцию knitr DEV = «tikz» ... специально для графа в вопросе:

<<c12slrModFIG, echo = FALSE, dev = "tikz", crop = TRUE, fig.align = 'center', results = 'hide', fig.height = 5, fig.width = 7, out.width='0.95\\linewidth', warning = FALSE>>= 
0

Решение sandipan использует latex2exp::TeX. Существует решение, которое сохраняет исходный код и вообще не использует latex2exp::TeX.

Когда я связался с авторами книги, они щедро отправили код и указали, что они использовали tikzDevice и knitr для создания графиков. Будучи новичком и для knitr/tkizDevice, я нашел способ получить изображение так же, как в книге (курсивом LateX'ed на сюжете); Я уверен, что должен быть лучший подход:

Файл tikzDeviceAndKnitr.Rnw помещается в рабочий каталог R (его можно найти через getwd()).

tikzDeviceAndKnitr.Rnw:

<<PASWR2fCh12S1, echo=FALSE, dev="tikz", crop=TRUE, fig.align='center', results='hide', fig.height=5, fig.width=7, out.width='0.95\\linewidth', warning=FALSE>>= 
library(tikzDevice) 
tikz('tikzDeviceAndKnitr.tex', standAlone=TRUE, width=5, height=5) 
opar <- par(no.readonly = TRUE) 
par(mar=c(2, 14, 2, 1), las = 1) 
DF <- data.frame(x = c(1, 4, 9), y = c(1, 4, 9)) 
plot(y~x, data = DF, xaxt = "n", yaxt = "n", 
    xlim = c(0, 12), ylim = c(-2, 12), 
    xlab = "", ylab = "", type = "n") 
abline(lm(y~x, data = DF), lwd = 2) 
axis(side =1, at =c(1, 4, 10), 
    labels = c("$x_1$", "$x_2$", "$x_3$")) 
axis(side =2, at =c(1, 4, 10), 
    labels = c("$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", 
       "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", 
       "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$")) 
segments(1, -2, 1, 2.5, lty = "dashed") 
segments(0, 1, 1 + 0.75, 1, lty = "dashed") 
segments(4, -2, 4, 5.5, lty = "dashed") 
segments(0, 4, 4 + 0.75, 4, lty = "dashed") 
segments(10, -2, 10, 11.5, lty = "dashed") 
segments(0, 10, 10 + 0.75, 10, lty = "dashed") 
ys <- seq(-1.5, 1.5, length = 200) 
xs <- dnorm(ys, 0, 0.5) 
lines(xs + 1, ys + 1, type = "l",lwd = 2) 
lines(xs + 4, ys + 4, type = "l",lwd = 2) 
lines(xs + 10, ys + 10, type = "l",lwd = 2) 
text(7.8, 5.5, "$E(Y|x) = \\beta_0 + \\beta_1x$") 
arrows(8, 5.7, 7, 7, length = 0.1, lwd = 2) 
par(opar) 
dev.off() 
tools::texi2dvi('tikzDeviceAndKnitr.tex',pdf=T) 
system(paste(getOption('pdfviewer'), 'tikzDeviceAndKnitr.pdf')) 
@ 

В MikTeX из Windows, установить пакеты, связанные с tikz и pgf.

Загрузка библиотеки в R и knit соответствующий файл .Rnw: ответ

library(PASWR2); library(ggplot2); library(car); library(scatterplot3d) 
library(gridExtra); library(multcomp); library(leaps); library(MASS) 
library(latex2exp); library(knitr);library(tikzDevice);library(tools) 
library(evaluate); library(markdown) 


knit("tikzDeviceAndKnitr.Rnw") # The solution ended. 

автор книги для меня:
Да .... tikzDevice используется с knitr. Полный код выглядит так:

\begin{figure}[!ht] 
<<c12slrModFIG, echo = FALSE, dev = "tikz", crop = TRUE, fig.align = 'center', results = 'hide', fig.height = 5, fig.width = 7, out.width='0.95\\linewidth', warning = FALSE>>= 
opar <- par(no.readonly = TRUE) # copy of current settings 
par(mar=c(2, 14, 2, 1), las = 1) 
DF <- data.frame(x = c(1, 4, 9), y = c(1, 4, 9)) 
plot(y~x, data = DF, xaxt = "n", yaxt = "n", 
    xlim = c(0, 12), ylim = c(-2, 12), 
    xlab = "", ylab = "", type = "n") 
abline(lm(y~x, data = DF), lwd = 2) 
axis(side =1, at =c(1, 4, 10), 
    labels = c("$x_1$", "$x_2$", "$x_3$")) 
axis(side =2, at =c(1, 4, 10), 
    labels = c("$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", 
       "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$", 
       "$E(Y|x_1) = \\beta_0 + \\beta_1x_1$")) 
segments(1, -2, 1, 2.5, lty = "dashed") 
segments(0, 1, 1 + 0.75, 1, lty = "dashed") 
segments(4, -2, 4, 5.5, lty = "dashed") 
segments(0, 4, 4 + 0.75, 4, lty = "dashed") 
segments(10, -2, 10, 11.5, lty = "dashed") 
segments(0, 10, 10 + 0.75, 10, lty = "dashed") 
ys <- seq(-1.5, 1.5, length = 200) 
xs <- dnorm(ys, 0, 0.5) 
lines(xs + 1, ys + 1, type = "l",lwd = 2) 
lines(xs + 4, ys + 4, type = "l",lwd = 2) 
lines(xs + 10, ys + 10, type = "l",lwd = 2) 
text(7.8, 5.5, "$E(Y|x) = \\beta_0 + \\beta_1x$") 
arrows(8, 5.7, 7, 7, length = 0.1, lwd = 2) 
par(opar) 
@ 
\caption{Graphical representation of simple linear regression model 
depicting the distribution of $Y$ given x \label{SLRgraph}} 
\end{figure}