Emacs org-modeを使ってみる: (38) org-babel-perlを使う4/4

このエントリーをはてなブックマークに追加

今回は,org-babel-perlの使い方を説明する(四回目).
なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている.

gnuplotを呼び出すプログラム

表を入力とし,gnuplotを呼び出しるプログラムを作成する.まず,以下のように「#+TBLNAME: table1」と記述して,入力となる表に名前を付ける.

#+TBLNAME: table1
|----+----------+--------+------|
|    | パソコン | ソフト | 通信 |
|----+----------+--------+------|
| Q1 |       30 |      5 |    2 |
| Q2 |        0 |     15 |    2 |
| Q3 |       50 |     20 |    2 |
| Q4 |        0 |      3 |    2 |
|----+----------+--------+------|

「#+BEGIN_SRC」のオプションとして, 「:var table=table1」で入力となる表を指定し,「:var row=3」でデータの最初の行番号を指定している.
プログラム中「font "ipa/ipag.ttf" 14」はフォントを指定しており,環境によって変更する必要がある.

#+BEGIN_SRC perl :results output raw :exports results :var table=table1 :var row=3
  my $title = "表1";
  my $image = "output.png";
  my $data = "plot$$.data";
  open(OUT, ">", $data) || die;
  foreach my $i ($row .. @$table - 1) {
      my @r = @{$table->[$i]};
      if (@r > 0) {
          print OUT join(" ", @r), "\n";
      }
  }
  close(OUT);
  open(GP, "| gnuplot") || die;
  $_ = <<EOM
  set terminal png font "ipa/ipag.ttf" 14
  set output '$image'
  set style histogram rowstacked
  set style fill solid border -1
  plot '$data' \\
    using 2:xticlabel(1) with histogram title 'パソコン', \\
    '' using 3 with histogram title 'ソフト', \\
    '' using 4 with histogram title '通信'
  quit
  EOM
  ;
  print GP $_;
  close(GP);
  unlink $data;
  print "[[file:$image][$title]]\n";
#+END_SRC

上のプログラムを実行すると,以下が挿入される.

#+results:
[[file:output.png][表1]]

output.pngは以下の通り.