Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/drorata/org-babel-matplotlib-integration
https://github.com/drorata/org-babel-matplotlib-integration
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/drorata/org-babel-matplotlib-integration
- Owner: drorata
- Created: 2015-05-18T20:00:02.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-05-26T11:45:15.000Z (over 9 years ago)
- Last Synced: 2024-10-12T21:07:52.741Z (3 months ago)
- Size: 125 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.org
Awesome Lists containing this project
README
#+TITLE: Integrate matplotlib figures in an org mode buffer
* Goal
The ultimate goal is to use org-babel as a replacement of IPython. The
first motivation is to enable an easier version controling of the
document. The first challenge I faced is integration of plots returned
by ~matplotlib~ in the org buffer.
* Capturing filenameI would like to use (babel) orgmode as an interactive python
notebook. Therefore, in order to allow the various code blocks to
"know" each other, it is important to use the ~:session~ option for
all relevant code blocks. However, once ~:session~ is used, together
with ~matplotlib~ the desired behavior is no longer in place under Mac
OS X.* Clean testing, no Matplotlib
For the sake of testing, the following merely suppose to return the
filename in an orgmode'ish link format:#+BEGIN_SRC python :session no_matplotlib :results file :exports both
x = 'hello '
y = 'world'
z = x + y
'foo.bar'
#+END_SRC#+RESULTS:
[[file:foo.bar]]*Passed* Indeed, the ~RESULTS~ block contains a link to the filename
indicated by the last string.* Importing Matplotlib
The following minimal example should generate a simple figure,
~myfig.png~, and orgmode should capture it and interpret it as a
filename to be used by the following ~RESULTS~ block.#+BEGIN_SRC python :session with_matplotlib :results file :exports both
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(3,2))
plt.plot([1,3,2])
plt.savefig('myfig.png')
'myfig.png'
#+END_SRC#+RESULTS:
[[file:]]*Failed!* This time, it doesn't work anymore. The file ~myfig.png~ is
properly generated, but the last string is not captured by
~matplotlib~. Following is the content of the corresponding
interactive python session:#+BEGIN_SRC
Process with_matplotlib finished
Python 3.4.3 (default, Mar 10 2015, 14:53:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> >>> >>> , '''/var/folders/kz/1c2cxn1x60n_t5p2j1p02b180000gn/T/py44814koH''', 'exec'));
import matplotlib
>>> import matplotlib
matplotlib.use('Agg')
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(3,2))
fig=plt.figure(figsize=(3,2))
plt.plot([1,3,2])
plt.plot([1,3,2])
plt.savefig('myfig.png')
plt.savefig('myfig.png')
'myfig.png'
'myfig.png'open('/var/folders/kz/1c2cxn1x60n_t5p2j1p02b180000gn/T/babel-44814cA3/python-44814xyN', 'w').write(str(_))
open('/var/folders/kz/1c2cxn1x60n_t5p2j1p02b180000gn/T/babel-44814cA3/python-44814xyN', 'w').write(str(_))'org_babel_python_eoe'
'org_babel_python_eoe'
>>> >>> >>> >>> []
>>> 'myfig.png'
>>> >>> 9
>>> >>> >>> 'org_babel_python_eoe'
>>>
#+END_SRCIt seems like ~ob-python.el~ manages to create the correct temp file,
but somehow it is not capturing the filename and doesn't plug it into
the right place in the results block.* Some background
** Python Version
#+BEGIN_SRC python :session background :results raw
import sys
sys.version
#+END_SRC#+RESULTS:
3.4.3 (default, Mar 10 2015, 14:53:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)]** Matplotlib version
#+BEGIN_SRC python :session background :results raw
import matplotlib
matplotlib.__version__
#+END_SRC#+RESULTS:
1.4.3** System
I am running Emacs version ~GNU Emacs 24.5.1 (x86_64-apple-darwin14.1.0, NS apple-appkit-1344.72) of 2015-04-19 on tenten-slave.macports.org~The orgmode version is: ~Org-mode version 8.2.10 (8.2.10-40-gc763fa-elpaplus @ /Users/drorata/.emacs.d/elpa/org-plus-contrib-20150518/)~
** Stackoverflow reference
I also posted a question in the SE network:
[[http://emacs.stackexchange.com/questions/11075/org-mode-python-session-does-not-return-a-file-name]]* Question
So, my question is how to tackle/debug this issue? Can someone give me
a hand here? That would be really great! Thanks!