you probably figured out the "import io" and "f = io..." line are not necessary here.
I couldn't figure out a reasonable way to use :results graphics link that didn't result in repeating the filename more than desired. These also both work, but seem to both require repeating the filename twice. #+BEGIN_SRC python :results graphics link :var fname="test.png" :file "test.png" import matplotlib.pyplot as plt plt.plot([1, 2, 3, 1]) plt.savefig(fname) #+END_SRC #+BEGIN_SRC python :results graphics link :file "test.png" import matplotlib.pyplot as plt plt.plot([1, 2, 3]) plt.savefig("test.png") #+END_SRC Something like this should work, but there seem to be some extra bytes getting put in the png file from the decoding, and latin-1 is the only one I can get to work. If anyone knows how to get this to work, I am interested in seeing it! #+BEGIN_SRC python :results value :file "io.png" import matplotlib.pyplot as plt import io buf = io.BytesIO() plt.plot([1, 2, 3]) plt.savefig(buf, format='png') s = buf.getvalue() return s.decode('latin-1') #+END_SRC In general though, all of these are much more work than using ob-ipython, which just puts images in the buffer for you. Roger Mason <rma...@mun.ca> writes: > Hello John, > > John Kitchin <jkitc...@andrew.cmu.edu> writes: > >> I think you can use something like this: >> >> #+BEGIN_SRC python :results output file :var fname="test.png" >> import matplotlib.pyplot as plt >> import io >> >> f = io.StringIO() >> plt.plot([1, 2, 3, 17]) >> plt.savefig(fname) >> print(fname, end='') >> #+END_SRC >> >> It is in Python3. > > Thank you. That works. > > Best wishes, > Roger -- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu