emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [org-babel] suggestions for using tikz() graphic device wi


From: Eric Schulte
Subject: Re: [Orgmode] [org-babel] suggestions for using tikz() graphic device with org-babel-R
Date: Wed, 14 Apr 2010 08:24:04 -0600
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Austin Frank <address@hidden> writes:

> Hi all--
>
> I'm very excited about a relatively new R package, tikzDevice.  This
> takes R graphics and generates LaTeX code inside a tikzpicture
> environment that reproduces the desired graphic.  This allows, among
> other things, for all text in a figure to use the same fonts as the rest
> of your document, and for graph annotations to use latex math markup.
>
> I have attached an example org file that has embedded R code that
> generates figures using the tikz() device.[fn:1]
>
> The output from a call to tikz() is a .tex file, which is intended to be
> included in a larger LaTeX file using the \input{} command.
>
> How would the org-babel gurus suggest that I automate the process of
> embedding these TeX-based graphics in an org file?  What is the right
> combination of :file, :exports, and :results arguments to have the
> generated file automatically included by a LaTeX \input{} command?
>

Hi Austin,

Yes, I agree, tikz is awesome.  I've recently started using it as my
favorite output terminal for gnuplot.  It allows graphs to scale
perfectly from papers to posters.  It's largely responsible for the
implementation of org-babel-latex, which allows for playing with tikz
through evaluation of latex source code blocks.

But, back to your question.  What does the R block return?

- if it returns the path to a file, then you can use :results file to
  insert a link to that file in your org-mode buffer, or you can wrap
  the path to that file in an include with something like the following

  #+source: graph-generator
  #+begin_src R :results file
    ...
  #+end_src
  
  #+begin_src emacs-lisp :var path=graph-generator :results latex
    (format "input{%s}" path)
  #+end_src

- if it returns raw LaTeX then you can use the :results latex header as
  used in the elisp block above

Hope that helps, if not then let me know.

Best -- Eric

>
> Thanks for any advice!
> /au
>
> Footnotes:
>
> [fn:1] If requested, I can send the generated tex and pdf files as well
>
> #+TITLE:     Generating PGF graphics from R in org-babel
> #+AUTHOR:    Austin F. Frank
> #+EMAIL:     address@hidden
> #+DATE:      2009-12-11 Fri
> #+LANGUAGE:  en
> #+OPTIONS:   H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
> #+OPTIONS:   TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
> #+LATEX_HEADER:  \usepackage{tikz} 
>
>
> Recently a new =R= package, =pgfSweave=, was announced.[fn:1]  This
> package boasts a fascinating capability:  generating all R graphics as
> \{LaTeX} code that will be typeset using the tikz package and included
> as PGF graphics.[fn:2]  This is an appealing option for several
> reasons:
>   1.  Scaling of size and adjustments of position should be handled
>       seamlessly and without loss of resolution
>   2.  Colors can be specified identically for graphics and any other
>       markup in the $\LaTeX$ document
>   3.  Since they're just more $\LaTeX$ code, graphics can be manually
>       edited in emacs
>   4.  Same fonts will be used for text in figures as are used in the
>       text of the document
>   5.  $\LaTeX$ markup can be used in figure text
>   6.  tikz integrates nicely with Beamer
>
> Given this list of features, I decided to see whether I could get
> similar functionality in org-babel.
> * R code
> ** Load =tikzDevice=
>    First, we need to load the packages required for producing tikz
>    output in =R=.  If all goes well, you should get a message about
>    the paths to the various programs required to generate $\LaTeX$
>    markup from within =R=.
>
> #+source: load_tikzDevice
> #+BEGIN_SRC R :results output :exports both :cache
> ## I want to show the messages that are generated when the package is
> ## loaded.  These are printed to the equivalent of stderr, so I have
> ## to rewrite the `message' function to produce output that I can
> ## print back later.
> tikz.message <-
>   capture.output(withCallingHandlers(library(tikzDevice),
>                                      message =
>                                      function (m) cat(m$message)))
>
> cat(tikz.message, sep="\n")
> #+END_SRC
>
> ** R example
> #+source: lmer_example
> #+BEGIN_SRC R :results output :exports both :cache :session
> ## I use this library all the time
> library(lme4)
>
> ## here's the standard example
> m <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy)
> print(m)
> #+END_SRC
>
> ** Graphics creation
> #+source: tikz_example
> #+BEGIN_SRC R :results file :exports code :cache :session
> library(tikzDevice)
> ranef.m <- ranef(m, postVar = TRUE)
> tikz(file = "ranef.tex", width=4, height=4)
> print(qqmath(ranef.m))
> dev.off()
> #+END_SRC
>
> #+BEGIN_CENTER
> #+CAPTION:  sample graphics
> \input{ranef}
> #+END_CENTER
>
> * Footnotes
>
> [fn:1] http://thread.gmane.org/gmane.comp.lang.r.packages/351
>
> [fn:2] http://sourceforge.net/projects/pgf/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]