TikZDevice: Добавьте \ caption {} и \ label {} к диаграмме TikZ, используя R - PullRequest
2 голосов
/ 22 июня 2011

Я создал цикл for, который выводит несколько графиков (через ggplot2) из ​​R в один файл .tex, используя пакет tikzDevice. Это облегчает включение нескольких диаграмм изнутри латексного документа, используя одну команду, которая указывает на файл .tex, выводимый из R (скажем, 'diagrams.tex'): \include{diagrams}.

Однако я также хотел бы обернуть каждую tikzpicture в окружение \begin{figure}, чтобы я мог вставить две дополнительные строки в каждый соответствующий рисунок: \caption{} и \label{}.

Вопрос: есть ли способ включить команды латекса рисунка-обертки, заголовка и метки напрямую для каждого соответствующего изображения ggplot (из моего цикла R) в выходной файл .tex?

Вот воспроизводимый код R, который генерирует файл diagrams.tex, содержащий 3 ggplots:

require(ggplot2)
require(tikzDevice)

## Load example data frame
A1 = as.data.frame(rbind(c(4.0,1.5,6.1),
c(4.0,5.2,3.5),
c(4.0,3.4,4.3),
c(4.0,8.2,7.3),
c(4.0,2.9,6.3),
c(6.0,3.9,6.6),
c(6.0,1.5,6.1),
c(6.0,2.7,5.3),
c(6.0,2.9,7.4),
c(6.0,3.7,6.0),
c(8.0,3.9,4.2),
c(8.0,4.1,3.5),
c(8.0,3.7,5.8),
c(8.0,2.5,7.5),
c(8.0,4.1,3.5)))
names(A1) = c("state","rmaxpay","urate")

i = 2

## name output file
tikz( 'diagrams.tex' )

for (i in 2:4){     #begin LOOP

st = i*2

df = NULL
df = subset(A1, state == st , select = c(2:3))

print(              # start print

ggplot(df, aes(rmaxpay,urate)) + geom_point() 

  )                 # end print

  }         #end LOOP

dev.off()

1 Ответ

3 голосов
/ 23 июня 2011

Может быть способ сделать это с помощью заговоров графика, но как это можно сделать, используя опцию console и sink():

require(ggplot2)
require(tikzDevice)

## Load example data frame
A1 = as.data.frame(rbind(c(4.0,1.5,6.1),
c(4.0,5.2,3.5),
c(4.0,3.4,4.3),
c(4.0,8.2,7.3),
c(4.0,2.9,6.3),
c(6.0,3.9,6.6),
c(6.0,1.5,6.1),
c(6.0,2.7,5.3),
c(6.0,2.9,7.4),
c(6.0,3.7,6.0),
c(8.0,3.9,4.2),
c(8.0,4.1,3.5),
c(8.0,3.7,5.8),
c(8.0,2.5,7.5),
c(8.0,4.1,3.5)))
names(A1) = c("state","rmaxpay","urate")

i = 2
fn <- "diagrams.tex"
if(file.exists(fn)) file.remove(fn)

for (i in 2:4){     #begin LOOP

  st = i*2

  df = NULL
  df = subset(A1, state == st , select = c(2:3))

  cat("\\begin{figure}\n", file = fn, append=TRUE)
  sink(fn, append=TRUE)
  tikz(console = TRUE)
    print(              # start print
      ggplot(df, aes(rmaxpay,urate)) + geom_point() 
    )                 # end print
  dev.off()
  sink()
  cat(paste("\\caption{figure}\\label{fig:",i,"}\n",sep=""), file = fn, append=TRUE)
  cat("\\end{figure}\n", file = fn, append=TRUE)

}         #end LOOP
...