Đưa LaTeX vào các ô R


119

Tôi muốn thêm LaTeXsắp chữ vào các phần tử của ô trong R(ví dụ: tiêu đề, nhãn trục, chú thích, v.v.) bằng cách sử dụng kết hợp của base/latticehoặc với ggplot2.

Câu hỏi:

  • Có cách nào để vào được LaTeXcác âm mưu bằng cách sử dụng các gói này không, và nếu có, nó được thực hiện như thế nào?
  • Nếu không, có các gói bổ sung cần thiết để thực hiện điều này không.

Ví dụ, trong Python matplotlibbiên dịch LaTeXthông qua các text.usetexgói như được thảo luận ở đây: http://www.scipy.org/Cookbook/Matplotlib/UsingTex

Có một quy trình tương tự để tạo ra những mảnh đất như vậy Rkhông?


1
Đây việc sức hướng dẫn cho bạn (làm việc kỳ diệu đối với tôi :)): r-bloggers.com/latex-in-r-graphs
Pragyaditya Das

Gói này để render LaTeX vào âm mưu có thể hữu ích: github.com/stefano-meschiari/latex2exp
Stefano Meschiari

Câu trả lời:


48

Đây là một ví dụ sử dụng ggplot2:

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

văn bản thay thế


17
Thật không may, điều này gần như không có các tính năng của LaTeX.
Myles Baker

tình hình hiện nay là gì? Tôi nghĩ rằng nó đã được cải thiện với R 3.1.1 một chút.
Léo Léopold Hertz 준영

35

Khi bị đánh cắp từ đây , lệnh sau sử dụng chính xác LaTeX để vẽ tiêu đề:

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

Xem ?plotmathđể biết thêm chi tiết.


12
Thú vị, cũng là công cụ tốt với demo (plotmath) Vì vậy, ký hiệu toán học phải được giải thích lại thông qua cú pháp của plotmath? Điều đó có vẻ như là một sự lãng phí thời gian vinh quang, đặc biệt nếu bạn có một biểu thức LaTeX liên quan. Đó là lý do tại sao tôi thích khả năng biên dịch LaTeX của matplotlib. Có thứ gì đó có thể sử dụng LaTeX và tạo ra cú pháp sơ đồ không?
DrewConway

Không phải là tôi biết. Có một bài thú vị tại RWiki về việc mủ cao để làm việc với ggplot2: wiki.r-project.org/rwiki/...
Christopher DuBois

34

Gói CRAN latex2exp chứa một TeXhàm dịch các công thức LaTeX sang các biểu thức biểu đồ của R. Bạn có thể sử dụng nó ở bất cứ đâu bạn có thể nhập các chú thích toán học, chẳng hạn như nhãn trục, nhãn chú giải và văn bản chung.

Ví dụ:

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)

tạo ra âm mưu này .


Điều đó thật tuyệt! Ông có thể giải thích những gì bạn có ý nghĩa bởi khoảng ? Nó hoạt động như thế nào?
Frans Rodenburg

1
Nói chung, ý tôi là các chuỗi LaTeX được dịch thành các biểu thức biểu đồ của R - có nghĩa là nếu biểu đồ không hỗ trợ một biểu tượng LaTeX cụ thể, nó sẽ không được hiển thị hoặc nó sẽ được hiển thị bằng cách kết hợp các ký hiệu có sẵn.
Stefano Meschiari 19/07/19

Nó không phải là tuyệt vời mặc dù. Trông ghê tởm và nó chỉ hỗ trợ một số ký hiệu hạn chế. Điều tồi tệ hơn là dường như không có bất cứ thứ gì giúp ích cho các âm mưu "chất lượng xuất bản" (thứ mà mọi người khẳng định sai là R có khả năng). Tôi đoán là thời gian để học Python ..
tảo


6

Đây là thông tin từ Báo cáo phòng thí nghiệm của riêng tôi.

  • tickzDevicexuất tikzhình ảnh choLaTeX
  • Lưu ý rằng trong một số trường hợp nhất định "\\"sẽ trở thành "\""$"trở thành "$\"như trong mã R sau đây:"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Ngoài ra xtable xuất bảng sang mã latex

Mật mã:

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

Đây là một chức năng thú vị cho phép bạn sử dụng chức năng sơ đồ, nhưng với các biểu thức được lưu trữ dưới dạng đối tượng của chế độ ký tự. Điều này cho phép bạn thao tác chúng theo lập trình bằng cách sử dụng các hàm dán hoặc biểu thức chính quy. Tôi không sử dụng ggplot, nhưng nó cũng sẽ hoạt động ở đó:

    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

Tôi đã làm điều này vài năm trước đây bằng cách xuất ra định dạng .fig thay vì trực tiếp sang .pdf; bạn viết các tiêu đề bao gồm mã latex và sử dụng fig2ps hoặc fig2pdf để tạo tệp đồ họa cuối cùng. Thiết lập tôi phải làm điều này đã bị hỏng với R 2,5; nếu tôi phải làm lại, thay vào đó tôi sẽ xem xét tikz, nhưng dù sao tôi cũng đưa điều này vào đây như một lựa chọn tiềm năng khác.

Ghi chú của tôi về cách tôi đã thực hiện nó bằng Sweave ở đây: http://www.stat.umn.edu/~arendahl/computing



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.