Memasukkan LaTeX ke dalam Plot R.

119

Saya ingin menambahkan LaTeXpengaturan huruf ke elemen plot di R(misalnya: judul, label sumbu, penjelasan, dll.) Menggunakan kombinasi base/latticeatau dengan ggplot2.

Pertanyaan:

  • Apakah ada cara untuk masuk LaTeXke dalam plot menggunakan paket ini, dan jika ya, bagaimana cara melakukannya?
  • Jika tidak, apakah ada paket tambahan yang diperlukan untuk melakukannya.

Misalnya, di Python matplotlibkompilasi LaTeXmelalui text.usetexpaket seperti yang dibahas di sini: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Apakah ada proses serupa di mana plot tersebut dapat dibuat R?

DrewConway
sumber
1
Tutorial ini mungkin berhasil untuk Anda (bekerja sangat baik bagi saya :)): r-bloggers.com/latex-in-r-graphs
Pragyaditya Das
Paket untuk membuat LaTeX menjadi plot mungkin berguna: github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Jawaban:

48

Berikut contoh penggunaan ggplot2:

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

alt teks

Christopher DuBois
sumber
17
Sayangnya, ini hampir tidak memiliki fitur LaTeX.
Myles Baker
Bagaimana situasinya sekarang? Saya pikir ini telah meningkat dengan sedikit R 3.1.1.
Léo Léopold Hertz 준영
35

Seperti yang dicuri dari sini , perintah berikut dengan benar menggunakan LaTeX untuk menggambar judul:

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

Lihat ?plotmathuntuk lebih jelasnya.

Christopher DuBois
sumber
12
Menarik, juga bagus dengan demo (plotmath) Jadi notasi matematika harus diinterpretasikan ulang melalui sintaks plotmath? Sepertinya membuang-buang waktu, terutama jika Anda memiliki ekspresi LaTeX yang terlibat. Itulah mengapa saya menyukai kemampuan matplotlib untuk mengkompilasi LaTeX itu sendiri. Apakah ada sesuatu yang dapat menggunakan LaTeX dan menghasilkan sintaks plotmath?
DrewConway
Tidak yang saya tahu. Ada pos menarik di RWiki tentang mendapatkan lateks untuk bekerja dengan ggplot2: wiki.r-project.org/rwiki/…
Christopher DuBois
34

Paket CRAN latex2exp berisi TeXfungsi yang menerjemahkan rumus LaTeX ke ekspresi plotmath R. Anda dapat menggunakannya di mana pun Anda dapat memasukkan anotasi matematika, seperti label sumbu, label legenda, dan teks umum.

Sebagai contoh:

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)

menghasilkan plot ini .

Stefano Meschiari
sumber
Ini bagus! Bisakah Anda menjelaskan kira-kira apa yang Anda maksud ? Bagaimana cara kerjanya?
Frans Rodenburg
1
Dengan kira-kira, maksud saya string LaTeX diterjemahkan ke dalam ekspresi plotmath R - yang berarti bahwa jika plotmath tidak mendukung simbol LaTeX tertentu, itu tidak akan dirender atau akan dirender dengan menggabungkan simbol yang tersedia.
Stefano Meschiari
Itu tidak bagus. Tampak menjijikkan dan hanya mendukung simbol dalam jumlah terbatas. Yang lebih buruk adalah ada tampaknya tidak menjadi apa pun yang tidak membantu dengan "kualitas publikasi" plot (sesuatu yang orang palsu klaim R mampu). Saatnya belajar Python, kurasa ..
alga
6

Ini sesuatu dari Laporan Lab saya sendiri.

  • tickzDevicemengekspor tikzgambar untukLaTeX
  • Perhatikan, bahwa dalam kasus tertentu "\\"menjadi "\"dan "$"menjadi "$\"seperti pada kode R berikut ini:"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Juga tabel ekspor xtable ke kode lateks

Kode:

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
sumber
4

Berikut adalah fungsi keren yang memungkinkan Anda menggunakan fungsionalitas plotmath, tetapi dengan ekspresi yang disimpan sebagai objek mode karakter. Ini memungkinkan Anda memanipulasinya secara terprogram menggunakan fungsi tempel atau ekspresi reguler. Saya tidak menggunakan ggplot, tetapi seharusnya berfungsi juga di sana:

    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
sumber
2

Saya melakukan ini beberapa tahun yang lalu dengan mengeluarkan ke format .fig alih-alih langsung ke .pdf; Anda menulis judul termasuk kode lateks dan menggunakan fig2ps atau fig2pdf untuk membuat file grafik akhir. Setup yang harus saya lakukan ini putus dengan R 2.5; jika saya harus melakukannya lagi, saya akan melihat tikz sebagai gantinya, tetapi saya menyertakan ini di sini sebagai opsi potensial lainnya.

Catatan saya tentang bagaimana saya melakukannya menggunakan Sweave ada di sini: http://www.stat.umn.edu/~arendahl/computing

Aaron meninggalkan Stack Overflow
sumber