组织模式代码块评估

时间:2012-02-26 20:11:02

标签: emacs org-mode

在Org-mode中,我试图将一些Python 2-liner的数据“管道”到Gnuplot,但我无法弄清楚如何正确地做到这一点(Gnuplot图像保持在0kb)。那是我在这方面走了多远:

 #+NAME: foo
 #+begin_src python :exports code
   import random
   for x in range (0,300):
    print random.randrange(1000), random.randrange(1000)
 #+end_src

#+begin_src gnuplot :file gnuplot.png :exports results
  reset
  plot call_foo notitle
 #+end_src

谁可以使这项工作?

2 个答案:

答案 0 :(得分:1)

我在emacs中的gnuplot目前无法正常工作,所以我无法给出完整的答案。但是,python位的:exports属性应为output,而不是code。此外,要在gnuplot会话中访问此数据,您可能希望将其作为表读取。所以如果你有你的python代码:

#+name: foo
#+begin_src python :exports results
  import random
  for x in range(0,300):
      print random.randrange(1000), random.randrange(1000)
#+end_src

你希望你的gnuplot会话在结果表中读作变量

#+name: plot-it(data = foo)
#+begin_src gnuplot :file gnuplot.png
  plot data notitle
#+end_src

您可能需要对gnuplot代码中的data变量进行一些处理,以确保它是适当的格式。如上所述,我目前无法测试,但它应该是一个起点。

答案 1 :(得分:0)

我对这两个问题进行了一些进一步的讨论,如何让Python发布一个Org表格,以及如何通过另一个Gnuplot块来评估它:Python可以做什么

  1. 返回[1,2,3]
  2. 打印“| 1 | 2 | 3 |” :结果输出原始
  3. 打印[a,b,c] :结果输出表
  4. 我已成功使用此代码块进行评估:

    #+name: foo
    #+begin_src python :results output raw :exports code
      import random
      out="| %s | %s |"
      for x in range(0, 300):
              pair=(random.randrange(1000), random.randrange(1000))
              print out % pair
    #+end_src
    
    #+begin_src gnuplot :var data=foo :file gnuplot.png :exports results
      reset
      set terminal png size 500,375
      plot data u 1:2 notitle
    #+end_src
    

    然而,通过这种设置,我总是必须“手动”执行Python块来生成#+ results:foo 块(包括以下行: | 629 | 884 | < / em>),到目前为止无法进行自动评估。

    编辑:#+srcname:替换为#+name:,因为自{8} Orgmode 7.8以来#+srcname:已过时。以前版本的Orgmode代码#+srcname: confused another user