LaTeX'i R Grafiklerine Alma


119

LaTeXGrafik elemanlarına dizgi eklemek istiyorum R(örneğin: başlık, eksen etiketleri, ek açıklamalar, vb.) base/latticeVeya kombinasyonunu kullanarak ggplot2.

Sorular:

  • LaTeXBu paketleri kullanarak arsalara girmenin bir yolu var mı ve eğer öyleyse, nasıl yapılır?
  • Değilse, bunu başarmak için gereken ek paketler var mı?

Örneğin, burada tartışıldığı gibi paketler aracılığıyla Python matplotlibderlemelerde : http://www.scipy.org/Cookbook/Matplotlib/UsingTexLaTeXtext.usetex

Bu tür grafiklerin oluşturulabileceği benzer bir süreç var mı R?


1
Bu eğitim sizin için işe yarayabilir (benim için harikalar yarattı
Pragyaditya Das

Yanıtlar:


48

İşte kullanılan bir örnek ggplot2:

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

alternatif metin


17
Ne yazık ki, bu neredeyse LaTeX'in özelliklerine sahip değil.
Myles Baker

Şimdi durum nedir? R 3.1.1 ile biraz geliştiğini düşünüyorum.
Léo Léopold Hertz 준영

35

Buradan çalındığı gibi , aşağıdaki komut LaTeX'i başlığı çizmek için doğru bir şekilde kullanıyor:

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

Daha ?plotmathfazla ayrıntı için bakın.


12
İlginç, aynı zamanda demo (plotmath) ile iyi şeyler Yani matematiksel gösterim, plotmath sözdizimi aracılığıyla yeniden yorumlanmalı mı? Bu muhteşem bir zaman kaybı gibi görünüyor, özellikle de bir LaTeX ifadeniz varsa. Bu yüzden matplotlib'in LaTeX'in kendisini derleme yeteneğini seviyorum. LaTeX'i alıp plotmath sözdizimi oluşturabilecek bir şey var mı?
DrewConway

Bildiğim kadarıyla hayır. RWiki'de lateksin ggplot2 ile çalışmasıyla ilgili ilginç bir gönderi var: wiki.r-project.org/rwiki/…
Christopher DuBois

34

CRAN paketi latex2exp , TeXLaTeX formüllerini R'nin plotmath ifadelerine çeviren bir işlev içerir . Eksen etiketleri, gösterge etiketleri ve genel metin gibi matematiksel açıklamalar girebileceğiniz her yerde kullanabilirsiniz.

Örneğin:

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)

bu arsayı üretir .


Bu harika! Yaklaşık olarak ne demek istediğini açıklayabilir misin ? Bu nasıl çalışıyor?
Frans Rodenburg

1
Yaklaşık olarak, LaTeX dizgilerinin R'nin plotmath ifadelerine çevrildiğini kastediyorum - bu, eğer plotmath belirli bir LaTeX sembolünü desteklemiyorsa, ya işlenmeyecek ya da mevcut sembolleri birleştirerek oluşturulacak demektir.
Stefano Meschiari

Yine de harika değil. İğrenç görünüyor ve yalnızca sınırlı sayıda sembolü destekliyor. Daha da kötüsü, "yayın kalitesi" planlarına yardımcı olacak hiçbir şey görünmüyor (insanların yanlışlıkla R'nin yapabileceğini iddia ettiği bir şey ). Python öğrenme zamanı sanırım ..
algler


6

İşte kendi Laboratuvar Raporlarımdan bir şey.

  • tickzDevicetikzgörüntüleri dışa aktarırLaTeX
  • Bazı durumlarda aşağıdaki R kodundaki gibi "\\"olur "\"ve "$"olur "$\":"$z\\frac{a}{b}$" -> "$\z\frac{a}{b}$\"

  • Ayrıca xtable tabloları lateks koduna aktarır

Kod:

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

Burada, karakter modunun nesneleri olarak saklanan ifadelerle plotmath işlevini kullanmanıza izin veren harika bir işlev var. Bu, yapıştırma veya normal ifade işlevlerini kullanarak bunları programlı olarak değiştirmenize olanak tanır. Ggplot kullanmıyorum ama orada da çalışmalı:

    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

Bunu birkaç yıl önce doğrudan .pdf yerine bir .fig biçiminde çıktı olarak yaptım; Lateks kodunu içeren başlıkları yazarsınız ve son grafik dosyasını oluşturmak için fig2ps veya fig2pdf kullanırsınız. Bunu yapmak zorunda olduğum kurulum R 2.5 ile bozuldu; eğer tekrar yapmak zorunda olsaydım bunun yerine tikz'e bakardım, ama bunu yine de buraya başka bir potansiyel seçenek olarak dahil ediyorum.

Sweave kullanarak nasıl yaptığıma dair notlarım burada: http://www.stat.umn.edu/~arendahl/computing



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.