2009-12-11 61 views
64

Tôi là một newbie cho cả R và LaTeX và vừa mới tìm thấy cách vẽ đồ thị chuỗi thời gian tiêu chuẩn bằng cách sử dụng R và lưu nó dưới dạng hình ảnh png. Điều tôi lo lắng là việc lưu nó dưới dạng hình ảnh và sau đó nhúng nó vào LaTeX sẽ mở rộng quy mô và làm cho nó trông xấu xí.Đưa ô R vào LaTeX?

Có cách nào để làm cho đầu ra của hàm plot() của R có hình ảnh vectơ và nhúng vào LaTeX không? Tôi là một người mới bắt đầu trong cả hai vì vậy hãy nhẹ nhàng :) Đoạn mã được đánh giá cao!

Trả lời

51

Shane là chỗ-on, bạn muốn Sweave. Cuối cùng.

Với tư cách là người mới, bạn có thể nên tách nhiệm vụ ra. Để làm điều đó, hãy thực hiện việc này:

  1. mở thiết bị: pdf("figures/myfile.pdf", height=6, width=6).
  2. vẽ đồ thị đối tượng R của bạn: plot(1:10, type='l', main='boring') - và nhớ rằng mạng và ggplot cần rõ ràng print xung quanh plot.
  3. quan trọng: đóng thiết bị của bạn: dev.off() để hoàn tất tệp.
  4. tùy chọn: kiểm tra tệp pdf.
  5. trong LaTeX, sử dụng usepackage{graphicx} trong tiêu đề tài liệu, sử dụng
    \includegraphics[width=0.98\textwidth]{figures/myfile} để bao gồm hình được tạo trước đó và lưu ý rằng phần mở rộng tệp là tùy chọn.
  6. chạy điều này thông qua pdflatex và tận hưởng.
+7

Tôi cũng nên đề cập đến việc tách nhiệm vụ như Dirk đã làm có thể mang lại lợi ích cho tài liệu rất lớn: phải xây dựng lại toàn bộ tài liệu từ đầu mỗi lần có thể gây đau đớn, chưa kể đến sự đau đớn của việc gỡ lỗi tài liệu Sweave lớn. – Shane

+1

Có các thủ thuật và gói lưu trong bộ nhớ đệm cho điều đó.Nhưng có, takeaway là sức mạnh của Sweave đi kèm tại một chút của một chi phí về độ phức tạp và opaqueness. Để đặt nó nhẹ :) –

+1

Cảm ơn! Bạn có thể cập nhật câu trả lời của bạn với một vài thứ mà tôi đã gặp phải, vì vậy nó dễ dàng hơn với những người mới khác như tôi có thể đến: bạn đã đặt '\ usepackage {graphicx}' trong tiêu đề tài liệu để chạy (tìm thấy ở đây: http: //tuxmann.blogspot.com/2006/06/latex-snippets-add-image-wrap-long.html); và bạn đang thiếu 'd' trên 'with = 0.98' – hsribei

22

Bạn có thể muốn xem xét sử dụng Sweave. Có rất nhiều tài liệu tuyệt vời có sẵn cho điều này trên trang web Sweave (và các nơi khác). Nó có cú pháp rất đơn giản: chỉ cần đặt mã R của bạn giữa <<>>=@.

Dưới đây là một ví dụ đơn giản mà kết thúc lên looking like this:

\documentclass[a4paper]{article} 

\title{Sweave Example 1} 
\author{Friedrich Leisch} 

\begin{document} 

\maketitle 

In this example we embed parts of the examples from the 
\texttt{kruskal.test} help page into a \LaTeX{} document: 

<<>>= 
data(airquality) 
library(ctest) 
kruskal.test(Ozone ~ Month, data = airquality) 
@ 
which shows that the location parameter of the Ozone 
distribution varies significantly from month to month. Finally we 
include a boxplot of the data: 

\begin{center} 
<<fig=TRUE,echo=FALSE>>= 
boxplot(Ozone ~ Month, data = airquality) 
@ 
\end{center} 

\end{document} 

Xây dựng tài liệu, bạn chỉ có thể gọi R CMD Sweave file.Rnw hoặc chạy Sweave(file) từ bên trong R.

+2

I 2nd Sweave. Tôi sẽ chỉ thêm rằng RStudio có tích hợp tuyệt vời với Sweave, có thể đặc biệt quan trọng đối với người mới bắt đầu (cài đặt bản phân phối LaTeX và nhấp vào một nút trong RStudio). –

+0

@ChrisBeeley bạn có thể thả một số liên kết giải thích RStudio và tích hợp LaTeX không? Cảm ơn bạn. –

+0

http://rstudio-pubs-static.s3.amazonaws.com/639_b3a59601ba94400aabbe29025de83c10.html –

3

Đây là một câu hỏi về SO mà tôi không thể tìm thấy.

Nhưng: http://r-forge.r-project.org/projects/tikzdevice/ - tikz đầu ra từ r và http://www.rforge.net/pgfSweave/ đang tikz qua sweave.

Sử dụng tikz sẽ cung cấp cho bạn giao diện phù hợp với phần còn lại của tài liệu, cộng với nó sẽ sử dụng latex để sắp xếp tất cả văn bản trong biểu đồ của bạn.

EDIT Getting LaTeX into R Plots

+2

Câu hỏi đó ngược lại với câu hỏi này: Ở đây OP hỏi làm thế nào để thêm các ô R vào một tài liệu LaTeX. Ở đó, OP đã hỏi cách thêm các phương trình LaTeX vào một ô R. – Shane

+0

Tiêu đề là một diễn giải có chủ ý :) – hsribei

+0

Đúng, nhưng không phải là câu trả lời giống nhau;) – Mica

52

Tôi muốn giới thiệu gói tikzDevice để sản xuất ra để đưa vào tài liệu LaTeX:

http://cran.r-project.org/web/packages/tikzDevice/index.html

Các tikzDevice chuyển đổi đồ họa sản xuất trong R để mã có thể được giải thích bởi gói LaTeX tikz.TikZ cung cấp một hệ thống vẽ vector rất đẹp cho LaTeX. Một số ví dụ tốt về sản lượng TikZ được đặt tại:

http://www.texample.net/

Các tikzDevice có thể được sử dụng như bất kỳ thiết bị đồ họa R khác:

require(tikzDevice) 

tikz('myPlot.tex') 

plot(1, 1, main = '\\LaTex\\ is $\\int e^{xy}$') 

dev.off() 

Lưu ý rằng những dấu xồ nguợc trong macro LaTeX phải được tăng gấp đôi như R diễn giải một dấu gạch chéo ngược đơn lẻ làm ký tự thoát. Để sử dụng cốt truyện trong một tài liệu LaTeX, chỉ đơn giản bao gồm nó:

\include{path/to/myPlot.tex} 

Gói pgfSweave chứa Sweave chức năng có thể xử lý các bước trên cho bạn. Đảm bảo rằng tài liệu của bạn chứa \usepackage{tikz} ở đâu đó trong phần mở đầu LaTeX.

http://cran.r-project.org/

Những lợi thế của tikz() chức năng so với pdf() là:

  • Phông chữ của nhãn và chú thích trong con số của bạn luôn luôn phù hợp với font chữ được sử dụng trong tài liệu LaTeX của bạn. Điều này cung cấp một cái nhìn thống nhất cho tài liệu của bạn.

  • Bạn có tất cả sức mạnh của trình sắp xếp LaTeX có sẵn để tạo chú thích toán học và có thể sử dụng mã LaTeX tùy ý trong văn bản hình của bạn.

Nhược điểm của tikz() chức năng bao gồm:

  • Nó không quy mô tốt để xử lý lô với rất nhiều thành phần. Đây là những thứ như persp() lô các ma trận lớn. Số lượng cắt của các yếu tố đồ họa có thể khiến LaTeX làm chậm quá trình thu thập dữ liệu hoặc hết bộ nhớ.

  • Gói hiện được gắn cờ là bản beta. Điều này có nghĩa là giao diện hoặc chức năng của gói có thể thay đổi nếu tác giả tìm thấy lý do thuyết phục để làm như vậy.

tôi nên kết thúc bài này bằng cách tuyên bố từ bỏ rằng Tôi là tác giả của cả hai tikzDevicepgfSweave gói nên quan điểm của tôi có thể bị sai lệch. Tuy nhiên, tôi đã sử dụng cả hai gói để sản xuất một số báo cáo học thuật trong năm qua và đã rất hài lòng với kết quả.

+2

+1 Bài đăng tuyệt vời và dự án rất hay mà bạn đã có! Tôi sẽ giữ câu trả lời pdf là "chấp nhận" bởi vì nó dễ dàng hơn trên người mới, nhưng tôi đang cố gắng ra của bạn. Có điều gì tôi cần phải xác định ở phía LaTeX ngoài 'include' không? Có lỗi này: 'Môi trường tikzpicture undefined'. – hsribei

+0

Xin lỗi, tôi nên làm rõ hơn là bạn cần sử dụng gói 'tikz' trong tài liệu LaTeX của mình. Đã chỉnh sửa bài đăng. – Sharpie

+0

Gói tuyệt vời! Đối với tôi, đây là gói R đầu tiên tôi cài đặt và tôi mất một lúc để tìm hiểu cách thực hiện điều này. Đối với người tiếp theo: sử dụng lệnh 'install.packages()' từ bên trong R - dễ dàng! @Sharpie, tôi sẽ quan tâm đến làm thế nào để có được lệnh 'R CMD install tikzDevice' để làm việc (tôi đã gặp khó khăn với điều này trong một thời gian, 'với thiếu toán hạng đích file operand') – Tom

Các vấn đề liên quan