2009-12-11 25 views
64

Jestem nowicjuszem zarówno dla R, jak i LaTeXa i właśnie niedawno odkryłem, jak wykreślić standardowy wykres przebiegu czasowego za pomocą R i zapisać go jako obraz png. Martwi mnie to, że zapisanie go jako obrazu, a następnie osadzenie go w LaTeX spowoduje skalowanie i sprawianie, że będzie wyglądać brzydko.Pierwsze R działek w LaTeX?

Czy jest jakiś sposób, aby funkcja R = plot() wyprowadziła grafikę wektorową i umieściła ją w LaTeX? Jestem totalnym początkującym, więc bądźcie łagodni :) Fragmenty kodu są wysoko cenione!

Odpowiedz

51

Shane jest spot-on, ty chcesz Sweave. Ostatecznie.

Jako początkujący lepiej jest oddzielić zadanie od siebie. W tym celu wykonaj następujące czynności:

  1. otwórz urządzenie: pdf("figures/myfile.pdf", height=6, width=6).
  2. narysuj swój obiekt R: plot(1:10, type='l', main='boring') - i pamiętaj, że krata i ggplot potrzebują wyraźnego print około plot.
  3. Ważne: zamknij urządzenie: dev.off(), aby sfinalizować plik.
  4. opcjonalnie: sprawdź plik pdf.
  5. w LaTeX, użyj usepackage{graphicx} w nagłówku dokumentu, użyj
    \includegraphics[width=0.98\textwidth]{figures/myfile}, aby dołączyć figurę utworzoną wcześniej i pamiętaj, że rozszerzenie pliku jest opcjonalne.
  6. uruchom go przez pdflatex i ciesz się.
+7

Powinienem też wspomnieć, że oddzielenie zadania od Dirka może być korzystne dla bardzo dużych dokumentów: konieczność odbudowania całego dokumentu od początku za każdym razem może być bolesny, nie wspominając o agonii debugowania dużego dokumentu Sweave. – Shane

+1

Istnieje jednak buforowanie trików i pakietów.Ale tak, na wynos jest to, że moc Sweave jest trochę kosztowna pod względem złożoności i nieprzejrzystości. Mówiąc łagodnie :) –

+1

Dzięki! Możesz zaktualizować swoją odpowiedź kilkoma rzeczami, na które natknąłem się, więc łatwiej jest na innych początkujących, takich jak ja, które mogą pochodzić: wstawiłeś '\ usepackage {graphicx}' w nagłówku dokumentu, aby to działało (znaleziono to tutaj: http: //tuxmann.blogspot.com/2006/06/latex-snippets-add-image-wrap-long.html); i brakuje ci 'd' na 'with = 0.98' – hsribei

22

Być może warto rozważyć użycie Sweave. Dostępnych jest wiele doskonałej dokumentacji na stronie internetowej Sweave (i gdzie indziej). Ma bardzo prostą składnię: po prostu wpisz kod R pomiędzy <<>>= i @.

Oto prosty przykład, który kończy się 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} 

Aby zbudować dokument, można po prostu zadzwonić R CMD Sweave file.Rnw lub uruchomić Sweave(file) od wewnątrz R.

+2

I 2nd Sweave. Dodam tylko, że RStudio ma wspaniałą integrację ze Sweave, co może być szczególnie ważne dla początkującego (zainstaluj dystrybucję LaTeX i kliknij jeden przycisk w RStudio). –

+0

@ChrisBeeley czy możesz rzucić jakiś link wyjaśniający integrację RStudio i LaTeX? Dziękuję Ci. –

+0

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

3

To dupe pytanie na SO, którego nie mogę znaleźć.

Ale: http://r-forge.r-project.org/projects/tikzdevice/ - wyjście TikZ od r i http://www.rforge.net/pgfSweave/ kod TikZ poprzez sweave.

Używanie tikz zapewni spójność wyglądu z resztą dokumentu, a także użyje lateksu, aby złożyć cały tekst na wykresach.

EDIT Getting LaTeX into R Plots

+2

To pytanie jest przeciwieństwem tego pytania: tutaj OP pyta, jak dodać R działek do dokumentu LaTeX. Tam OP pytał, jak dodać równania LaTeXa do wykresu R. – Shane

+0

Tytuł był celową parafrazą :) – hsribei

+0

To prawda, ale nie jest to odpowiedź sama;) – Mica

52

Polecam pakiet tikzDevice wytwarzania wyjście włączenia w dokumentach LaTeX:

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

tikzDevice konwertuje grafiki wyprodukowany w R do kodu, który można interpretować przez pakiet LaTeX tikz.TikZ dostarcza bardzo ładny system do rysowania wektorów dla LaTeX. Kilka dobrych przykładów wyjścia TikZ znajdują się pod adresem:

http://www.texample.net/

tikzDevice mogą być używane jak każdy inny R urządzeniu grafiki:

require(tikzDevice) 

tikz('myPlot.tex') 

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

dev.off() 

ukośniki w makr LaTeX musi być podwojona jako R interpretuje pojedynczy ukośnik odwrotny jako znak ucieczki. Aby skorzystać z wykresu w dokumencie LaTeX, wystarczy umieścić go:

\include{path/to/myPlot.tex} 

Pakiet pgfSweave zawiera Sweave funkcjonalność, która może obsłużyć powyższy krok dla Ciebie. Upewnij się, że dokument zawiera \usepackage{tikz} gdzieś w preambule LaTeX.

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

Zalety tikz() funkcji w porównaniu do pdf() są:

  • Czcionka etykiet i podpisy w swoich rysunkach zawsze dopasowuje czcionkę używaną w dokumencie LaTeX. Zapewnia to ujednolicony wygląd dokumentu.

  • Masz całą moc narzędzia LaTeX dostępną do tworzenia adnotacji matematycznych i możesz używać dowolnego kodu LaTeX w tekście liczbowym.

Wady funkcji tikz() są:

  • To nie skaluje się dobrze do obsługi działek z dużą ilością składników. Są to rzeczy takie jak persp() działki o dużych rozmiarach. Liczba elementów graficznych w wyniku ścinania może spowodować zwolnienie LaTeX-a do przeszukiwania lub braku pamięci.

  • Pakiet jest obecnie oznaczony jako beta. Oznacza to, że interfejs lub funkcjonalność pakietu może ulec zmianie, jeśli autorzy znajdą do tego nieodpowiedni powód.

powinienem zakończyć ten post przez zrzeczenia się, że jestem autorem obu pakietach tikzDevice i pgfSweave więc moja opinia może być nieobiektywna. Jednak użyłem obu pakietów do stworzenia kilku raportów akademickich z zeszłego roku i byłem bardzo zadowolony z wyników.

+2

+1 Doskonały post i bardzo fajny projekt, jaki masz! Zachowaj odpowiedź pdf jako "zaakceptowaną", ponieważ jest łatwiejsza dla początkujących, ale próbuję ją. Czy jest coś, co muszę podać na stronie LaTeX oprócz "include"? Wystąpił ten błąd: 'Środowisko tikzpicture undefined'. – hsribei

+0

Przepraszam, powinienem był wyjaśnić, że musisz użyć pakietu 'tikz' w swoim dokumencie LaTeX. Post edytowany. – Sharpie

+0

Świetny pakiet! Dla mnie był to pierwszy pakiet R, który zainstalowałem i zajęło mi trochę czasu, aby dowiedzieć się, jak to zrobić. Dla następnej osoby: użyj polecenia 'install.packages()' z poziomu R - easy! @Sharpie, byłbym zainteresowany, jak uzyskać komendę 'R CMD install tikzDevice' do pracy (przez pewien czas miałem z tym problem, z błędem operandu pliku docelowego) – Tom