emacs-orgmode
[Top][All Lists]

## Re: [O] Inline plot with matplotlib

 From: Rasmus Subject: Re: [O] Inline plot with matplotlib Date: Tue, 10 Sep 2013 01:08:43 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Johan Ekh <address@hidden> writes:

> Hi all,
> I would like to create a plot with matplotlib and have it exported to a
> beamer presentation without storing the plot in a file. Is that possible?

I guess you'd want to plot is as a pgf file, whether real of
'virtual'.  You could send the result to STDOUT but it may take a bit
more effort.  Also, a simple test with sys.stdout says the pgf backend
doesn't support stdout. . .

If *printing* to a pgf file everything works out of the box in recent
versions of Org.

> Can someone point me to an example or a good starting point?

http://matplotlib.org/users/pgf.html

Here's an example of a simple plot.

#+TITLE: =matplotlib= and =pgf=
#+NAME:spectrum
#+BEGIN_SRC python :var OUT="test.pgf" :exports results :results value file
import matplotlib as mpl
pgf_with_pdflatex = {
"pgf.texsystem": "pdflatex",
"text.usetex": True,
'pgf.rcfonts': False,
'font.size': 9,
'fond.family': 'serif',
"pgf.preamble": [
r"\usepackage[utf8]{inputenc}",
r"\usepackage[T1]{fontenc}"]}
mpl.rcParams.update(pgf_with_pdflatex)
import matplotlib.pyplot as plt
from numpy import pi, cos, linspace
s1, t1, t2 = 1, .8, .2
s = lambda w: s1 / (2 * pi) * (1 + t1 ** 1 + t2 ** 2 + (1 + t2) * 2 * t1 *
cos(w) + 2 * t2 * cos(4 * w))
x = linspace(0, pi, 1000)
plt.figure(figsize=(4,1.5))
plt.plot(x, s(x))
plt.xlim( 0, pi)
plt.xlabel("$\\omega$")
plt.ylabel("Spectrum")
plt.tight_layout(0)
plt.savefig(OUT, format = 'pgf')
return(OUT)
#+END_SRC

#+RESULTS: spectrum
[[file:test.pgf]]

--
. . . The proofs are technical in nature and provides no real understanding.