дезинфицировать метки оси решетки для устройства tikz

Я пытаюсь связать lattice contourplot в документ PDF, используя knitr и устройство tikz, но при компиляции получаю Error in getMetricsFromLaTeX(TeXMetrics). Вот минимальный воспроизводимый пример:

\documentclass{article}

\begin{document}

<<contourplot,dev='tikz',echo=FALSE>>=
library(lattice)
library(RCurl)
x <- getURL("https://dl.dropboxusercontent.com/u/3966900/likelihoods.csv")
likelihoods <- read.csv(text=x)

cutoffs <- c(-    Inf,-2700,-1497,-1486.6,-1486.3,-1486.286,-1486.28513,-1486.285082,-1486.28508033,-1486.285080237,    Inf)
contourplot(ll ~ var1*var2,
                           data = likelihoods,
                           scales = list(y = list(log = 10)),
                           at=cutoffs,
                           label.style='align',
                           labels=as.character(cutoffs),
                           xlab='$\\\\\\sigma$')
@

\end{document}

Все это работает, если я удаляю строку scales (я предполагаю, что это ^ в метках осей, которые отключают tikz?), но выглядит как дерьмо.

Это также работает, если я добавлю sanitize=TRUE к параметрам чанка и удалю две обратные косые черты из строки xlab. Однако в этом случае метка оси также очищается, и я не получаю метку оси, набранную LaTeX.

Как заставить все работать?


person RoyalTS    schedule 19.08.2014    source источник
comment
Есть ли причина не использовать ggplot? Это хорошо работает с вязалкой. Например: <<label, fig.cap="My caption", fig.pos="h", echo=FALSE, fig.align='center', fig.height = 3, fig.width=5, out.height = '3in', out.width='5in'>>=, тогда сюжет: ggplot(blah) + theme_bw(base_size = 8).   -  person Andy Clifton    schedule 22.08.2014
comment
Я попробовал ggplot (с пакетом, с которым у меня гораздо больше опыта, чем с lattice), но так и не получил сюжет, похожий на тот, что показан выше. Но, поиграв с этим еще немного, возможно, это было преждевременно. Это делает почти то, что я хочу: stackoverflow. com/questions/19658088/   -  person RoyalTS    schedule 22.08.2014
comment
Вы можете использовать scales = list(y = list(log=10, at=10**seq(5,15,5)))) или scales = list(y = list(log=10, at=10**seq(5,15,5), label=sprintf("$10^{%d}$", seq(5,15,5)))) в countourplot()   -  person rcs    schedule 25.08.2014
comment
Я очень доволен решением Энди ggplot, но, поскольку ваше решение фактически отвечает на исходный вопрос, вы хотите опубликовать его как ответ и получить вознаграждение?   -  person RoyalTS    schedule 25.08.2014


Ответы (2)


Чтобы очистить метки осей, измените аргумент scales следующим образом:

# e-notation (like ggplot2)
scales = list(y = list(log=10, at=10**seq(5, 15, 5))))

or

scales = list(y = list(log=10, at=10**seq(5, 15, 5),
              label=sprintf("$10^{%d}$", seq(5, 15, 5))))
person rcs    schedule 27.08.2014

Как предполагает Энди Клифтон в комментариях, сделать это с ggplot кажется чертовски проще, чем заставить его работать с решеткой:

\documentclass{article}

\begin{document}

<<contourplot,dev='tikz',echo=FALSE,warning=FALSE>>=
library(ggplot2)
library(scales)
library(RCurl)
x <- getURL("https://dl.dropboxusercontent.com/u/3966900/likelihoods.csv")
likelihoods <- read.csv(text=x)

cutoffs <- c(-Inf,-2700,-1497,-1486.6,-1486.3,-1486.286,-1486.28513,-1486.285082,-1486.28508033,-1486.285080237,Inf)

v <- ggplot(likelihoods, aes(var1, var2, z = ll))
v <- v + stat_contour(breaks=cutoffs)
v <- v + scale_y_continuous(trans=log10_trans(),
                            breaks=c(1e-5,1e0,1e5,1e10,1e15,1e20),
                            expand = c(0, 0))
v <- v + scale_x_continuous(limits = c(-3, 5),
                            expand = c(0, 0))
v <- v + theme_bw()
v <- v + ylab('$\\sigma$')
v
@

\end{document}
person RoyalTS    schedule 22.08.2014
comment
Примечание для себя - отвечайте на вопрос, а не комментируйте! Рад, что это сработало. - person Andy Clifton; 22.08.2014
comment
Извините, не хотел украсть ваш кредит. Основываясь на вашем комментарии, я проработал детали за считанные минуты и подумал, что проще всего просто опубликовать решение. Я был бы рад удалить свой ответ, позволить вам опубликовать его и наградить вас наградой. - person RoyalTS; 22.08.2014
comment
Ничего страшного - только шутки. Я понятия не имею, как ты заставил это работать, но ты это сделал, так что это все твое. - person Andy Clifton; 22.08.2014