February 2012 Archives

February 5, 2012

Gnuplotの canvas terminalドキュメントの和訳

gnuplot 4.4 document の canvas terminal の所を和訳してみました。かなり意訳になっているので、間違いや勘違いを含んでいる可能性があります。この原文は英語で、http://www.gnuplot.info/docs_4.4/gnuplot.pdf (p.169 - 170)にあります。この邦訳の著作権も原文に準じるものとし、この邦訳によって生じたいかなる損害の責任は負いません。

83.7 Canvas

Syntax: 
      set terminal canvas {size <xsize>, <ysize>} {fsize <fontsize>}
                          {{no}enhanced} {linewidth <lw>}
                          {standalone {mousing} | name '<funcname>'}
                          {jsdir 'URL/for/javascripts'}
                          {title '<some string>'}

ここで、<xsize> と <ysize> は、プロットエリアのサイズをピクセルを単位で指定します。 デフォルトサイズは、standalone モードで、横600、縦400ピクセルです。 デフォルトフォントサイズは10です。 NB: Only one font is available, the ascii portion of Hershey simplex Roman provided in the file canvastext.js. You can replace this with the file canvasmath.js, which contains also UTF-8 encoded Hershey simplex Greek and math symbols.

デフォルトのstandaloneモードは、HTML5の canvas 要素を使ってプロットする JavaScript のコードを含むHTMLページを生成します。このHTMLページは ''canvastext.js' と 'gnuplot_common.js' の2つの JavaScript ファイルをリンクしなければなりません。デフォルトでは、ローカルにあるファイルをリンクしており、一般的な Unixライクなシステムでは、/usr/local/share/gnuplot/<version>/js ディレクトリの中にあります。他のプラットフォームに関しては、installation notesを参照してください。これを変更するには、jsdir オプションに、他のローカルのディレクトリまたはURLを指定します。このURLの指定は、ネットワークに接続されているクライアントマシンにプロットしたグラフを転送するときに使われます。

canvas ターミナルによって全てのプロットにマウスを使うことができます。キーワード mousing を追加すると、standalone モードのプロットの横にマウストラッキングボックスが追加されます。gnuplot は、canvastext.js'と同じディレクトリ、または URL にあるJavaScript ファイル 'gnuplot_mouse.js' とマウスボックスのためのスタイルシート 'gnuplot_mouse.css' へのリンクを追加します。

name オプションを指定すると、JavaScript だけが含まれたファイルを作成します。javascript ファイルに含まれている関数の名前と、 canvas 要素の id は、name オプションに続く文字列になります。以下のコマンドは、

      set term canvas name 'fishplot'
      set output 'fishplot.js'

fishplotという id を持つ canvas に描画する fishplot() という JavaScript で書かれた関数を含むファイルを生成します。 またこの JavaScript 関数を呼び出す HTML ファイルは、前述の canvastext.js をロードしておかなければなりません。 この fishplot を含む最低限の HTML ファイルは以下のようになるでしょう。

      <html>
      <head>
          <script src="canvastext.js"></script>

          <script src="gnuplot_common.js"></script>
      </head>
      <body onload="fishplot();">
          <script src="fishplot.js"></script>
          <canvas id="fishplot" width=600 height=400>
              <div id="err_msg">No support for HTML 5 canvas element>/div>
          </canvas>
      </body>
      </html>

February 4, 2012

gnuplot の canvas terminal についての諸々

gnuplot 4.4から、terminalにcanvasが追加された。このcanvasは、何を隠そうHTML5のCanvasオブジェクトに、グラフを描画するコードを出力する。たとえば、以下のコマンドを入力すると、

set terminal canvas mousing jsdir 'http://www.argv.org/~chome/gnuplot'
set output 'sinx.html'
plot sin(x)

sinをプロットした画像が、sinx.html に書き出される。次に、

set terminal canvas name 'sinx'
set output 'sinx.js'
plot sin(x)

と入力すると、name オプションで指定した文字列のidを持つcanvas要素にグラフを描画する関数を含むJavaScriptのコード「のみ」が、sinx.jsに出力される。ドキュメントによると、このスクリプトを使う最小構成は以下のようなHTMLとのことだ。

<html>
<head>
<script src="canvastext.js"></script>
<script src="gnuplot_common.js"></script>
</head>
<body onload="fishplot();">
<script src="fishplot.js"></script>
<canvas id="fishplot" width=600 height=400>
<div id="err_msg">No support for HTML 5 canvas element</div>
</canvas>
</body>
</html>  

が、OSX版のChromeでは、変数zoomedが宣言されていないとエラーが出るので、以下のようにグローバル変数 zoomedを宣言する。JavaScriptのみを出力する場合は自前でコードを追加するはずなので、そこで宣言しておけばよいだろう。

<html>
<head>
<script src="canvastext.js"></script>
<script src="gnuplot_common.js"></script>
</head>
<body onload="sinx();">
<script type="text/javascript">
var zoomed = false;
....
</script>
<script src="sinx.js"></script>
<canvas id="sinx" width=600 height=400>
<div id="err_msg">No support for HTML 5 canvas element</div>
</canvas>
</body>
</html>  

2012年2月4日現在、すでにgnuplot 4.6-RC1が出ており、このバグが修正されているか確認するしたところ、修正されていた。よって4.6以降のgnuplotでは変数zoomedを宣言刷る必要はない。

February 2, 2012

pipeを使ってgnuplotをCで書いたプログラムから制御する方法(Win32)

gnuplotは優れたプロットプログラムである。インタラクティブにコマンドを入力してもよいし、スクリプトを書いてバッチ処理もできる。そしてWin32であっても、パイプを使って外部プログラムから制御することもできる。ここではWin32 APIを使って、Cで書かれたプログラムからgnuplotを操作してみた。

#include <stdio.h>
#include <stdlib.h>

static const char *GNUPLOT = "c:\\gnuplot\\binary\\gnuplot.exe -persist";

int main(int argc, char* argv[])
{
	FILE *pPipe = _popen(GNUPLOT, "w");
	
	if(NULL == pPipe){
		printf("popen fail\n");
		return 0;
	}

	fprintf(pPipe, "set terminal png\n");
	fprintf(pPipe, "set output 'test.png'\n");
	fprintf(pPipe, "plot cos(x)\n");
	_pclose(pPipe);
	return 0;
}

 非常に簡単だ。UNIX同様パイプを作成し、パイプにコマンドを入力する。この例だと、test.pngというファイルにcos(x)のグラフがPNG画像として保存される。ポイントは、gnuplotコマンドに -persistオプションを付けることである。

そういえば、気になっていたスタイルシートを修正しました。

About this Archive

This page is an archive of entries from February 2012 listed from newest to oldest.

January 2012 is the previous archive.

March 2012 is the next archive.

Find recent content on the main index or look in the archives to find all content.