นำ LaTeX เข้าสู่ R Plots


119

ฉันต้องการที่จะเพิ่มLaTeXการเรียงพิมพ์กับองค์ประกอบของการแปลงในR(เช่นชื่อ, ป้ายชื่อแกนคำอธิบายประกอบ ฯลฯ ) โดยใช้การรวมกันของหรือbase/latticeggplot2

คำถาม:

  • มีวิธี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
Stefano Meschiari

คำตอบ:


48

นี่คือตัวอย่างโดยใช้ggplot2:

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

ข้อความแสดงแทน


17
น่าเสียดายที่สิ่งนี้ไม่มีคุณสมบัติเกือบทั้งหมดของ LaTeX
Myles Baker

สถานการณ์ตอนนี้เป็นอย่างไร? ฉันคิดว่ามันดีขึ้นด้วย R 3.1.1 เล็กน้อย
LéoLéopold Hertz 준영

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/…
Christopher DuBois

34

แพ็คเกจ CRAN latex2expมี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 ที่เฉพาะเจาะจงจะไม่แสดงผลหรือจะแสดงผลโดยการรวมสัญลักษณ์ที่มีอยู่
Stefano Meschiari

มันไม่ดีแม้ว่า ดูน่าขยะแขยงและรองรับสัญลักษณ์จำนวน จำกัด เท่านั้น ที่แย่ไปกว่านั้นคือดูเหมือนจะไม่มีอะไรที่ช่วยในเรื่อง "คุณภาพการตีพิมพ์" ได้เลย (สิ่งที่ผู้คนแอบอ้างอ้างว่า R สามารถทำได้) เวลาเรียนรู้ Python ฉันเดา ..
สาหร่าย


6

นี่คือข้อมูลจาก Lab Reports ของฉันเอง

  • 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



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.