Org-mode 代码块评估

4
在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个回答

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变量进行一些处理,以确保它是适当的格式。正如我上面所述,我目前无法测试这个,但它应该是一个起点。


我已经继续进行了一些工作,请看下面。 - dshh2011

0

我已经在这两个问题上有了一些进展,如何让Python输出一个Org表格,以及如何通过另一个Gnuplot块进行评估:Python可以做到

  1. return [1, 2, 3]
  2. print "| 1 | 2 | 3 |" for :results output raw
  3. 或者print [a, b, c] for :results output table

我已经成功地使用这些代码块进行了评估:

#+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 |这样的行),到目前为止还无法自动评估。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接