Невозможно создать сгруппированную гистограмму с помощью knitr, используя tikz в beamer

Я пытаюсь создать гистограмму с помощью knitr и tikzDevice для презентации beamer.

Я уже сгенерировал гистограмму с помощью консоли в R-studio, поэтому кажется, что данные отформатированы правильно, но компиляция документа (с использованием R-studio) с параметром dev=tikz (или 'dev = pdf', если на то пошло) просто создает пустой слайд с заголовком и без ошибок (насколько я могу судить).

Данные выглядят так:

   Dag Okt   Ar Bes
1    M   K 2009 522
2    M  Vm 2009  89
3    T   A 2009   0
4    T  Sg 2009 252
5    T  SS 2009   0
6    O  Vo 2009   0
7    O  St 2009 238
8    O   B 2009 107
9   To  Vt 2009 249
10  To  Tu 2009 121
11   F  Sk 2009 415
12   F  Tt 2009   0
13   M   K 2010 558
14   M  Vm 2010 283
15   T   A 2010  36
16   T  Sg 2010 211
17   T  SS 2010   0
18   O  Vo 2010   0
19   O  St 2010 381
20   O   B 2010 164
21  To  Vt 2010 260
22  To  Tu 2010  99
23   F  Sk 2010 397
24   F  Tt 2010  19
25   M   K 2011 571
26   M  Vm 2011 302
27   T   A 2011 273
28   T  Sg 2011 183
29   T  SS 2011  84
30   O  Vo 2011   0
31   O  St 2011 368
32   O   B 2011  53
33  To  Vt 2011 298
34  To  Tu 2011  92
35   F  Sk 2011 346
36   F  Tt 2011  30
37   M   K 2012 479
38   M  Vm 2012 382
39   T   A 2012 146
40   T  Sg 2012 181
41   T  SS 2012  57
42   O  Vo 2012  83
43   O  St 2012 379
44   O   B 2012  54
45  To  Vt 2012 507
46  To  Tu 2012 173
47   F  Sk 2012 238
48   F  Tt 2012  55

Код такой:

\documentclass{beamer}
\usepackage[norsk]{babel}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage[T1]{fontenc}
\usepackage{pgf}
\usepackage{tikz}

\mode<presentation>
{
  \usetheme{Frankfurt}
  % or ...

  \setbeamercovered{transparent}
  % or whatever (possibly just delete it)
}



\title[]{Title}

\subtitle{} % (optional)


\title{Title}
\author{JB}
\date{\today}
\if pdf
\pdfinfo {
  /Author (JB)
  /Title (Title)
  /Subject ()
  /Keywords ()
  /CreationDate (D:20130531)
}
\fi
\begin{document}

\maketitle

\section{Intro}
\begin{frame}
\frametitle{Test}
\begin{itemize}
\item Test
\end{itemize}
\end{frame}


\section{Data}

% Hidden R code chunk --- reading in the data
<<setup, echo=FALSE,message=FALSE>>=
require(ggplot2)
require(tikzDevice)
histdata<-read.csv("data.csv")
histdata$Ar<-factor(histdata$Ar)
@

\begin{frame}
<<histogram,echo=FALSE,dev=tikz,cache=FALSE>>=
ggplot(histdata,aes(x=Dag,y=Bes,fill=Ar))+geom_bar(position="dodge",stat="identity")+ scale_fill_grey(start=0.8, end=0)
@
\end{frame}
\end{document}

person Hantabaru    schedule 16.06.2013    source источник
comment
Итак, немного поигравшись с R-Studio, я понял, что презентация не компилируется с помощью knitr, и обнаружил ошибку Quitting from lines 61-62 (test_knitr.Rnw) Error in auto_exts[x] : invalid subscript type 'closure' Calls: knit ... process_group.block -> call_block -> block_exec -> dev2ext   -  person Hantabaru    schedule 17.06.2013
comment
Просто для пояснения: я обновился до knitr версии 1.2.10, чтобы проверить, была ли это ошибка и нет ли изменений в ошибке.   -  person Hantabaru    schedule 17.06.2013


Ответы (1)


Что ж, похоже, я решил свой собственный вопрос. Не совсем уверен в причине проблемы, но я объясню, как я обнаружил, что это не работает.

Как обычно в таких ситуациях, мне пришлось начать с объединения кода с основными элементами, в данном случае оставив только шаблон beamer без языковых пакетов.

Затем я добавил один фрагмент кода с простым именем метки и устройством <<nrone,dev='tikz'>>=, убедившись, что я заключил 'tikz' в одинарные кавычки.

Затем я постепенно добавил элементы в фрагмент кода, начиная с импорта данных.

Когда я импортировал данные, я удалил строки с 2010-2012 в столбце histdata$Ar, чтобы упростить график, а затем постепенно добавил недостающие данные, когда я был уверен, что они скомпилированы.

При добавлении данных я также добавил дополнительные настройки в строку ggplot, чтобы правильно сгруппировать данные, сделать цветовую схему черно-белой и наклонить метки по оси x.

Сюжет был немного большим, поэтому я добавил параметр out.width, чтобы он подходил, и поставил cache=FALSE, чтобы он обновлял изображение каждый раз, когда я компилировал, а также echo=FALSE,message=FALSE для удаления постороннего текста.

Затем я разделил фрагмент кода на два с импортом данных в один фрагмент кода и построением графика данных на втором, как и раньше.

Пройдя через этот процесс, я понял, что мне не нужен require(tikzDevice), который у меня был раньше.

Исправленный код выглядит следующим образом:

\documentclass{beamer}
\usepackage[norsk]{babel}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage[T1]{fontenc}

\mode<presentation>
{
  \usetheme{Frankfurt}
  % or ...

  \setbeamercovered{transparent}
  % or whatever (possibly just delete it)
}



\title[]{Title}

\subtitle{} % (optional)


\title{Title}
\author{JB}
\date{\today}
\if pdf
\pdfinfo {
  /Author (JB)
  /Title (Title)
  /Subject ()
  /Keywords ()
  /CreationDate (D:20130531)
}
\fi
\begin{document}

\maketitle


% Hidden R code chunk --- reading in the data
<<setup, echo=FALSE,message=FALSE>>=
require(ggplot2)
histdata<-read.csv("data.csv")
histdata$Ar<-factor(histdata$Ar)
@

\begin{frame}
<<histogram,echo=FALSE,message=FALSE,dev='tikz',cache=FALSE,out.width='.8\\textwidth'>>=
ggplot(histdata,aes(x=Okt,y=Bes,fill=Ar)) + geom_bar(position="dodge",stat='identity') +  scale_fill_grey(start=0.8, end=0) + theme(axis.text.x = element_text(angle=30, hjust=1, vjust=1))
@
\end{frame}
\end{document}

Надеюсь, это поможет кому-то в подобной ситуации :-)

person Hantabaru    schedule 17.06.2013
comment
Я уверен, что ошибка была вызвана тем, что у вас не было кавычек вокруг tikz, т.е. вы должны написать dev='tikz' вместо dev=tikz, как подчеркивается в документации: yihui.name/knitr/options - person Yihui Xie; 17.06.2013
comment
Вполне возможно. Я действительно думал, что у меня они есть, но я вижу из исходного кода, который я поставил в вопросе, что они не были включены. - person Hantabaru; 17.06.2013