Получение LaTeX в R-графиках

119

Я хотел бы добавить LaTeXнабор текста к элементам графиков в R(например: заголовок, метки осей, аннотации и т. Д.), Используя либо комбинацию, base/latticeлибо с ggplot2.

Вопросы:

  • Есть ли способ получить LaTeXдоступ к графикам с помощью этих пакетов, и если да, то как это делается?
  • Если нет, нужны ли для этого дополнительные пакеты.

Например, при Python matplotlibкомпиляции LaTeXчерез text.usetexпакеты, обсуждаемые здесь: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Есть ли аналогичный процесс, с помощью которого могут быть созданы такие графики R?

DrewConway
источник
1
Этот учебник может сработать для вас (творил чудеса для меня :)): r-bloggers.com/latex-in-r-graphs
Pragyaditya Das
Этот пакет для рендеринга LaTeX в графики может быть полезен: github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Ответы:

48

Вот пример использования ggplot2:

q <- qplot(cty, hwy, data = mpg, colour = displ)
q + xlab(expression(beta +frac(miles, gallon)))

альтернативный текст

Кристофер Дюбуа
источник
17
К сожалению, в этом нет возможностей LaTeX.
Майлс Бейкер
Какая сейчас ситуация? Я думаю, что с R 3.1.1 он немного улучшился.
Лео Леопольд Герц 준영
35

Как украдено отсюда , следующая команда правильно использует LaTeX для рисования заголовка:

plot(1, main=expression(beta[1]))

Подробнее ?plotmathсм.

Кристофер Дюбуа
источник
12
Интересный, а также хороший материал с демонстрацией (plotmath). Значит, математическую нотацию нужно интерпретировать заново с помощью синтаксиса plotmath? Это кажется восхитительной тратой времени, особенно если у вас задействовано выражение LaTeX. Вот почему мне нравится способность matplotlib самостоятельно компилировать LaTeX. Есть ли что-то, что может использовать LaTeX и генерировать синтаксис сюжетной математики?
DrewConway,
Не то, что я знаю о. На RWiki есть интересный пост о том, как латекс может работать с ggplot2: wiki.r-project.org/rwiki/…
Кристофер Дюбуа,
34

Пакет latex2exp CRAN содержит TeXфункцию, которая переводит формулы LaTeX в выражения plotmath R. Вы можете использовать его везде, где можете вводить математические аннотации, такие как метки осей, метки легенды и общий текст.

Например:

x <- seq(0, 4, length.out=100)
alpha <- 1:5

plot(x, xlim=c(0, 4), ylim=c(0, 10), 
     xlab='x', ylab=TeX('$\\alpha  x^\\alpha$, where $\\alpha \\in 1\\ldots 5$'), 
     type='n', main=TeX('Using $\\LaTeX$ for plotting in base graphics!'))

invisible(sapply(alpha, function(a) lines(x, a*x^a, col=a)))

legend('topleft', legend=TeX(sprintf("$\\alpha = %d$", alpha)), 
       lwd=1, col=alpha)

производит этот сюжет .

Стефано Мескьяри
источник
Это круто! Не могли бы вы объяснить, что вы имеете в виду под приблизительно ? Как это работает?
Frans Rodenburg
1
Приблизительно я имел в виду, что строки LaTeX переводятся в выражения plotmath R - это означает, что если plotmath не поддерживает определенный символ LaTeX, он либо не будет отображаться, либо будет отображаться путем объединения доступных символов.
Стефано Мескьяри
Хотя это не здорово. Выглядит отвратительно и поддерживает только ограниченное количество символов. Что еще хуже, похоже, нет ничего, что действительно помогло бы с графиками «качества публикации» (то, на что люди ложно утверждают, что R способен). Пора выучить Python, я думаю ..
водоросли
6

Вот кое-что из моих собственных лабораторных отчетов.

  • tickzDeviceэкспортирует tikzизображения дляLaTeX
  • Обратите внимание, что в некоторых случаях "\\"становится "\"и "$"становится, "$\"как в следующем R-коде:"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Также xtable экспортирует таблицы в латексный код

Код:

library(reshape2)
library(plyr)
library(ggplot2)
library(systemfit)
library(xtable)
require(graphics)
require(tikzDevice)

setwd("~/DataFolder/")
Lab5p9 <- read.csv (file="~/DataFolder/Lab5part9.csv", comment.char="#")

AR <- subset(Lab5p9,Region == "Forward.Active")

# make sure the data names aren't already in latex format, it interferes with the ggplot ~  # tikzDecice combo
colnames(AR) <- c("$V_{BB}[V]$", "$V_{RB}[V]$" ,  "$V_{RC}[V]$" , "$I_B[\\mu A]$" , "IC" , "$V_{BE}[V]$" , "$V_{CE}[V]$" , "beta" , "$I_E[mA]$")

# make sure the working directory is where you want your tikz file to go
setwd("~/TexImageFolder/")

# export plot as a .tex file in the tikz format
tikz('betaplot.tex', width = 6,height = 3.5,pointsize = 12) #define plot name size and font size

#define plot margin widths
par(mar=c(3,5,3,5)) # The syntax is mar=c(bottom, left, top, right).

ggplot(AR, aes(x=IC, y=beta)) +                                # define data set 
    geom_point(colour="#000000",size=1.5) +                # use points
    geom_smooth(method=loess,span=2) +                     # use smooth
    theme_bw() +                    # no grey background
    xlab("$I_C[mA]$") +                 # x axis label in latex format
    ylab ("$\\beta$") +                 # y axis label in latex format
    theme(axis.title.y=element_text(angle=0)) + # rotate y axis label
    theme(axis.title.x=element_text(vjust=-0.5)) +  # adjust x axis label down
    theme(axis.title.y=element_text(hjust=-0.5)) +  # adjust y axis lable left
    theme(panel.grid.major=element_line(colour="grey80", size=0.5)) +# major grid color
    theme(panel.grid.minor=element_line(colour="grey95", size=0.4)) +# minor grid color 
    scale_x_continuous(minor_breaks=seq(0,9.5,by=0.5)) +# adjust x minor grid spacing
    scale_y_continuous(minor_breaks=seq(170,185,by=0.5)) + # adjust y minor grid spacing
    theme(panel.border=element_rect(colour="black",size=.75))# border color and size

dev.off() # export file and exit tikzDevice function
N8TRO
источник
4

Вот классная функция, которая позволяет вам использовать функцию plotmath, но с выражениями, хранящимися как объекты символьного режима. Это позволяет вам управлять ими программно, используя функции вставки или регулярного выражения. Я не использую ggplot, но он тоже должен работать:

    express <- function(char.expressions){
       return(parse(text=paste(char.expressions,collapse=";")))
    }
    par(mar=c(6,6,1,1))
    plot(0,0,xlim=sym(),ylim=sym(),xaxt="n",yaxt="n",mgp=c(4,0.2,0),
       xlab="axis(1,(-9:9)/10,tick.labels,las=2,cex.axis=0.8)",
       ylab="axis(2,(-9:9)/10,express(tick.labels),las=1,cex.axis=0.8)")
    tick.labels <- paste("x >=",(-9:9)/10)
    # this is what you get if you just use tick.labels the regular way:
    axis(1,(-9:9)/10,tick.labels,las=2,cex.axis=0.8)
    # but if you express() them... voila!
    axis(2,(-9:9)/10,express(tick.labels),las=1,cex.axis=0.8)
mwrowe
источник
2

Я сделал это несколько лет назад, выводя данные в формате .fig, а не напрямую в .pdf; вы пишете заголовки, включая латексный код, и используете fig2ps или fig2pdf для создания окончательного графического файла. Настройка, которую мне пришлось сделать, сломалась с R 2.5; если бы мне пришлось сделать это снова, я бы посмотрел на tikz, но я все равно включаю это здесь как еще один потенциальный вариант.

Мои заметки о том, как я это сделал с помощью Sweave, находятся здесь: http://www.stat.umn.edu/~arendahl/computing

Аарон покинул Stack Overflow
источник
0

У меня просто есть обходной путь. Можно сначала сгенерировать файл eps, а затем преобразовать его обратно в pgf с помощью инструмента eps2pgf. См. Http://www.texample.net/tikz/examples/eps2pgf/

Синь Го
источник