Потрапляння LaTeX в R-сюжети


119

Я хотів би додати LaTeXнабір елементів до елементів графіків у R(наприклад: заголовок, мітки осі, анотації тощо), використовуючи комбінацію base/latticeабо з ggplot2.

Запитання:

  • Чи є спосіб потрапити LaTeXна сюжети за допомогою цих пакетів, і якщо так, то як це робиться?
  • Якщо ні, чи потрібні додаткові пакети для цього.

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

Чи існує подібний процес, за допомогою якого можна створити такі сюжети R?


1
Цей підручник може працювати для вас (творив чудеса для мене :)): r-bloggers.com/latex-in-r-graphs
Pragyaditya Das

Цей пакет для надання LaTeX на сюжети може бути корисним: github.com/stefano-meschiari/latex2exp
Стефано Мескіарі

Відповіді:



35

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

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

Дивіться ?plotmathдокладнішу інформацію.


12
Цікавий, також хороший матеріал із демонстрацією (plotmath) Тож математичне позначення потрібно повторно інтерпретувати через синтаксис plotmath? Це здається славною марною тратою часу, особливо якщо у вас є вираз LaTeX. Ось чому мені подобається можливість matplotlib збирати сам LaTeX. Чи може щось взяти LaTeX і генерувати синтаксис plotmath?
DrewConway

Не те, що я знаю. У RWiki є цікавий пост про те, як латекс працювати з ggplot2: wiki.r-project.org/rwiki/…
Крістофер Дюбуа

34

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

Наприклад:

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

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)

2

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

Мої замітки про те, як я це робив за допомогою Sweave, можна знайти тут: http://www.stat.umn.edu/~arendahl/computing



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.