この文書では、2012 年 3 月にリリースされた gnuplot の正式最新版である version 4.6 を取り扱っています。
この文書のバージョンは $
Revision: 1.48 $
,
$
Date: 2012/03/02 17:50:40 $
です。
このドキュメントの最新版は http://www.gnuplot.info/faq/ の Web 上にあります。
コメント、提案等は電子メールで開発者向けメーリングリスト [email protected]
に送ってください。
faq.tex
に関する提案をお寄せください。このファイルは http://gnuplot.cvs.sourceforge.net/viewvc/gnuplot/faq/
にあります。
gnuplot はコマンド駆動型の対話型関数描画プログラムです。関数の描画、 およびデータ点の描画を 2 次元、3 次元の両方で、 様々な異なる書式で行うことができます。 これは主に科学的なデータを画面表示するものとして設計されています。 gnuplot の著作権は保護されていますが、自由に配布でき、 代金を払う必要はありません。
gnuplot の作者は Thomas Williams, Colin Kelley, Russell Lang, Dave Kotz, John Campbell, Gershon Elber, Alexander Woo、 そして多くの協力者です。
以下は Thomas Williams によります:
私は微分方程式の講義を、そして Colin は電磁気学の講義を取っていて、 2 人ともそれらに関する数学が視覚化できればなあと考えていました。 私達はある EE (Engineering Electronics) VLSI 研の システム管理者として働いていて、そして、 グラフィック端末とコーディングを行なう時間がありました。 その投稿は我々の期待以上に良く受け入れられ、そして、不完全でしたが、 ファイルデータに関するいくつかのサポートに我々を駆り立てました。
GNUplot という紹介はどんなものも正しくはありません。 このプログラムの本当の名前は "gnuplot" です。 ずいぶんと "Gnuplot" と書かれているのを見るでしょうが、 それは我々の大半が、固有名詞やタイトルであっても、 文章を小文字で開始することに嫌悪を持っているからです。 gnuplot は GNU プロジェクトや FSF とは、 極わずかの意味を除けば少しも関係ありません。 我々のソフトウェアは完全に独立にデザインされたもので、 そして "gnuplot" という名前は実は妥協によるものです。 私は "llamaplot" と呼びたかったし、 Colin は "nplot" と呼びたかったのです。 そして、我々は "newplot" がいいだろうということで合意しましたが、 しかしそのときその名前を持つ、絶対的におぞましい Pascal のプログラムを 計算機科学部でたまに使っていることを知りました。 それで私は "gnuplot" がいいごろ合わせになるとして、 後で Colin もそれに同意したのです。
ええ。gnuplot は対話型実行中に 追加コマンドを含むファイルを読み込むことができますし、 既に存在するファイルや標準入力からのコマンド列を パイプを使ってバッチモードでそれを処理することもできます。 gnuplot は、Octave のような高水準な数学パッケージの背後で実行する グラフィックドライバとして使われていますし、 cgi スクリプトでラップすることで 容易に Web 起動型の描画生成ツールとして使うこともできます。
gnuplot は、MS Windows, linux, unix, OSX などの 多くのプラットホーム上で、広く利用できます。 現在のソースコードは、VMS, Ultrix, OS/2, MS-DOS, BeOS, Macintosh などの 古いシステムのサポートも保持していますが、 バージョン 4.0 以降では古いプラットホームでは 徹底的なテストは行われていません。
他のプラットホームでも動くことを知っていたら、 FAQ のメンテナに教えてください。
gnuplot のソースは、標準的 (ANSI/ISO C, POSIX 等) な環境から 多少外れたものの上でもコンパイルできるでしょう。
gnuplot はボランティアの集団によって作られたフリーウェアです。 彼らは gnuplot、およびその使用の許可、 不許可に関する法的な文書を作成できません。また何の保証もありません。 自分自身の責任で使用してください。
以下は、R. Freund による数学関数のサブルーチンパッケージの README からの引用です:
全ての意図、目的に関して、そのコードがやることに対する任意の記述は そのコードが我々のマシンの上で昨年のある火曜日にたまたま行なったこ とに対して我々が考えたこと、と解釈されるべきです。もしついていれば そのコードは貴方に対してもある日同じことをするでしょう。繰り返しま すが「それ」をついているだけだと本当に思えますか ?
gnuplot は FSF が作ったのでも FSF がメンテナンスしているのでもありません。 そして GNU GPL (General Public License) に保護されてもいません。 今では FSF から配布されてもいますが、 しかし、それは版権のためではありません。
gnuplot は、無償であると言う意味でフリーウェアです。 しかし、あなたが改変したものを自由に配布することが認められるか、 ということに関してはフリーウェアではありません。 配布物に含まれる Copyright というファイルを読んで それを承認してください。
gnuplot Web ページ http://www.gnuplot.info を見てください。
英語以外の他の言語での文書や入門書もあります。 最新のリストについては、http://gnuplot.sourceforge.net/help.html の "Localized learning pages about gnuplot" の節をご覧ください。
gnuplot の最新の正式リリース版は 4.6 です。 最新のパッチレベルは 4.6.0 です (2012 年 3 月現在)。
始めに最も適切な場所は http://www.gnuplot.info です。 ここから、例えば SourceForge 上の開発プロジェクトサイト http://sourceforge.net/projects/gnuplot などの、 色々なサイトの場所を見つけられるでしょう。
ソース配布物 ("gnuplot-4.6.0.tar.gz" または同様の名前) は公式の配布サイト http://sourceforge.net/projects/gnuplot にあります。
gnuplot の開発版は、cvs ソースツリーの形で、オンラインで直接 http://sourceforge.net/projects/gnuplot/ の "CVS" セクションから参照できます。 そこに含まれているドキュメントに従って、 例えば、以下のようなコマンド列によって 最新のソースをすべてダウンロードすることもできます。
cvs -d:pserver:[email protected]:/cvsroot/gnuplot login cvs -z3 -d:pserver:[email protected]:/cvsroot/gnuplot co -P gnuplotまたは (bash では)
export CVSROOT=:pserver:[email protected]:/cvsroot/gnuplot cvs login cvs -z3 checkout gnuplot
パスワードを聞かれたら <return>
を打ちます。
その後、gnuplot のコンパイルの段階の ./configure の前に、 ./prepare を実行して 最新の configure 用のファイルを作成する必要があります。
公式の gnuplot の開発版の暫定的なバイナリリリースはありませんので、 自分自身でコンパイルする必要があります。 しかし、OS/2, Windows, Macintosh などのいくつかのプラットフォーム用の 非公式なバイナリ版はどこかに見つかるかも知れません。
重要な注意: 開発版に対する質問は必ず [email protected] に送ってください。
他のソフトのインストールと同様です。README.1ST, README, INSTALL ファイルを読んでください。
ドキュメントはソース配布物に含まれています。サブディレクトリ docs を見てください。そこには以下のものを生成するファイルがあります。
もしあなたのシステムに LATEX がインストールされていれば、 ドキュメントはインストール時に自動的に生成されます。 docs と tutorial ディレクトリの中を見てください。 サブディレクトリ docs の中で make pdf とすることで、 見る/印刷するためのハイパーテキストファイル gnuplot.pdf が用意されます。
http://gnuplot.sourceforge.net/documentation.html に、 gnuplot のオンラインドキュメントがあります。
ソース配布物には動作するサンプルのディレクトリが含まれています。 これらサンプル、およびその結果の描画グラフは http://gnuplot.sourceforge.net/demo/ でも見ることができます。
このためには gnuplot をコンパイルし直す必要があります。
様々な人々が作った修正は、 出力ドライバのようなファイルを置き換えることで行なうか、 またはパッチ当てで行ないます。 ファイルの置き換えの場合、それ用の README ファイル、 またはそのファイルの最初の行に何か情報があるかも知れません。
パッチを当てる場合は、patch ユーティリティが必要で、
もしかしたら automake, autoconf というツールも
必要かもしれません。パッチを適用する場合の典型的なやり方は patch -p0 <newfunctionality.diff
です。
寄稿されたパッチの置き場所は gnuplot の sourceforge サイト http://sourceforge.net/tracker/?group_id=2055&atid=302055 の "Patches" セクションにあります。
コンパイル済みの gnuplotが与えられている場合、show
コマンドで、
それがコンパイルされたときに使用されたコンパイルオプション (別名コンパイレイションオプション、ビルドオプション) の一覧を表示できます。
gnuplot> show version long
このドキュメントを読んでください。
初期プロンプトで help
コマンドを実行してください。
その後キーワードをたどっていってください。
plot
や set
から始めるのがいいでしょう。
もし、持っているならマニュアルを読んでください
demo サブディレクトリを見てください。ヒントを与えてくれるでしょう。
システム管理者、または gnuplot を設定した同僚に尋ねてください。
それら全てに失敗したら、gnuplot の最新版に更新する、 あるいは更新するようシステム管理者に圧力をかけてください。 そして質問をニュースグループ ~comp.graphics.apps.gnuplot に投書するか、またはメーリングリスト [email protected] にメールを送ってください。 そのメーリングリストが別に受けてしまう圧倒的な量 spam を避けるため、 投稿の前にそのメーリングリストに参加 (subscribe) しなければいけません。 参加の方法は、gnuplot のマニュアル本文にあります。 メールを送る際は、バージョン番号とオペレーティングシステムを併記することを 忘れないでください。 そのメーリングリストを購読したいならば、URL http://lists.sourceforge.net/lists/listinfo/gnuplot-info を参照してください。 しかしニュースグループ ~comp.graphics.apps.gnuplot が直接読めるならば、そうしないでください。 質問をそのニュースグループに投稿すれば、 それはメールでの返事を請求する、 あるいは要約を投稿する良い形式と見なされます。
生成される出力の種類は set terminal
コマンドで定義します。
例えば
set terminal postscript
は
グラフを PostScript 形式で出力します。
出力は set output
コマンドでリダイレクトできます。
次の例は X-Windows System の動いている Unix マシン上で sin(x) のグラフをプリントアウトします。
gnuplot> plot [-6:6] sin(x) gnuplot> set terminal postscript Terminal type set to 'postscript' Options are 'landscape monochrome "Courier" 14' gnuplot> set output "sin.ps" gnuplot> replot gnuplot> set output # 出力先をデフォルトに戻す gnuplot> set terminal x11 # 出力形式をデフォルトに戻す gnuplot> ! lp -ops sin.ps # PS ファイルをプリントアウト (環境依存) request id is lprint-3433 (standard input) lp: printed file sin.ps on fg20.rz.uni-karlsruhe.de (5068 Byte) ! gnuplot>
プラットフォームに依存しない出力形式の復帰は、 コマンド set term push/pop によって以下のように行なえます。
gnuplot> set terminal postscript eps color lw 15 "Helvetica" 20 gnuplot> set out 'a.eps' gnuplot> replot gnuplot> set term popset term pop コマンドは、 その前に対応する set term push を実行していない場合は、 起動時の出力形式、例えば x11, pm, win 等に復帰します。
windows 出力形式では、そのツールバーの上のプリンタアイコンを クリックする、あるいはコマンドラインで screendump を実行することで グラフをプリントアウトできます。
基本的に、グラフをそのワープロソフトが理解できる形式のファイルに保存すれば (set term
と set output
を使います。上を見てください) そのワープロソフトで読み込むことができるでしょう。
後で正しいサイズに変換もできるという点で
ベクトル形式のフォーマット (PostScript, emf, svg, pdf, TEX, LATEX など) の方がいいでしょう。
細かいことはそのワープロソフトに依存します。
set term
として使用できるファイル形式のリストを見てください。
多くのワープロソフトは Encapsulated PostScript (EPS) のグラフを取り込めます。
これは
set terminal postscript eps [color]
というコマンドで生成できます。
注意しておきますが、EPS ファイルのグラフの bounding box を調べ、
修正するといいでしょう (手動、あるいは gnuplot Web ページにある fixbb スクリプトによって)。
いくつかの (大抵の ?) ワープロソフトは、
EPS ファイルに含まれる実際の画像を表示しませんので、
表示イメージをあなた自身で追加する必要があります。
その目的のためには、GSView ビューワ (OS/2, Windows, X11 用があります)、
あるいはいくつかの Unix 上の ps ツールが使えます。
注意しておきますが、表示用の画像は EPS ファイルのサイズを増大させます。
Tiff 6 パックビットを選択すれば最もその増加を押えることができます。
OpenOffice.org 等の Windows のオフィスアプリケーションには、 EMF 形式のベクトル画像を処理できるものがあります。 そのような画像ファイルは emf 出力形式でも作れますし、 windows 出力形式のグラフウィンドウのツールバーから 'Save as EMF...' を選択することでも作れます。
OpenOffice.org は SVG 形式も、AutoCAD の dxf 形式も読みこむことができます。
gnuplot を使って TEX や LATEX 文書に取り込むためのグラフを作る方法は
何通りもあります。
取り込む *.tex ファイルの断片を直接生成する出力形式もありますし、
includegraphics コマンドを使って取り込むための *.eps, *.pdf, *.png 出力を
生成するものもあります。
epslatex と cairolatex 出力形式は、画像ファイル (*.eps か *.pdf) と
それを参照する *.tex 文書ファイルの両方を生成します。
gnuplot 4.6 には tikz 出力形式があり、出力を pdflatex で処理する場合は
これでテキストとグラフ全部を生成できます。
大抵のワープロソフトはビットマップ画像 (png, pbm 等) を取り込むことができますが、 この方法の短所は、 そのグラフが gnuplot によって生成されたときのサイズによって その解像度が制限されてしまうことです。 一般に、文書が最終的にプリントアウトされる解像度よりも その解像度はかなり低くなります。
mif 出力形式は FrameMaker 用の出力を生成します。
これはあなたが使う出力形式に依存します。
tgif 出力形式を使うこともできます。 これは X11 で動く対話型 2 次元描画ツール tgif (http://http://bourbon.usc.edu/tgif/) に読ませるのに適した出力を生成します。
gnuplot は、例えば色や太さや点の形などの、
線や点の色々な属性を設定するための様々なコマンドを提供しています。
コマンド test
は、現在選択されている出力形式用の、
利用可能な定義済みの色、サイズ、形などの組合せを示す
テストページを出力します。
最初に、gnuplot の demo ディレクトリにある animate.dem を見てください。 基本的にグラフのアニメーションは、 適当なフォーマットの複数の描画の列で表現されます。
あなたの gnuplot が gd 2.0.29 以降 (直前の項参照) をリンクして作られたものであれば、 gif 出力形式で直接アニメーション GIF 画像を作成できます。
そうでなければ、whirlgif 3.04 というツールを入手してください。 それはランレングス圧縮された複数の GIF ファイルを読んで、 それらを最小のアニメーションファイルにまとめます。 マニュアルや例は、その Web ページで参照できます。
また、小さなスクリプトを書いて gnuplot に複数の GIF ファイルを生成させることもできます。 そして gifsicle (http://www.lcdf.org/ eddietwo/gifsicle) や gifmerge (http://the-labs.com/GIFMerge) のような 他のアニメーション作成ツールを使うこともできます。
mpeg_encode を使えば mpeg フォーマットの動画像にまとめることもできるでしょう。
gnuplot では陰関数のグラフや曲線は直接は描画できません。 しかし、次善の策はあります。
gnuplot> # 例: 次の行を適当な定義に置き換えてください。 gnuplot> f(x,y) = y - x**2 / tan(y) gnuplot> set contour base gnuplot> set cntrparam levels discrete 0.0 gnuplot> unset surface gnuplot> set table 'curve.dat' gnuplot> splot f(x,y) gnuplot> unset table gnuplot> plot 'curve.dat' w lその仕掛けは、曲面 z=f(x,y) の 1 本の等高線 z=0 を描き、 その等高線のデータをファイルにセーブすることにあります。
2 つの与えられた曲線の間を塗りつぶす描画は、
疑似ファイル '+' と filledcurves closed
を使えば簡単にできます。
以下の例は、2 つの曲線 f(x) と g(x) に対するデモです:
f(x)=cos(x) g(x)=sin(x) xmax=pi/4 set xrange [0:xmax] plot '+' using 1:(f($1)):(g($1)) with filledcurves closed
注意してもらいたいのですが、
上の例は 2 つの曲線の間の領域を塗りつぶすものであって、
不等式 g(x)<f(x) を満たす領域を塗りつぶすものではありません。
もし、後者を行ないたいなら、
using
部分で 3 項演算子を使って、
その不等式が満たされない場合は未定義値 (0/0) を返すようにする必要があります。
texttthelp filledcurves, help special-filenames, help ternary に関するドキュメントを参照してください。 demos ディレクトリ内の fillbetween.dem も参照してください。
set pm3d; splot 'a.dat'
とやっても、
カラーボックスは表示されるもののグラフは表示されないとしたら、
もしかしたら 2 つのつながっている線 (孤立線) を分離する空行が
ないのでは ? 空行を入れなさい ! これが何を意味するのかに興味があるなら、
gnuplot の demo ディレクトリにある demo/glass.dat
や demo/triangle.dat
などのファイルをじっくり見てください。
以下の awk スクリプト (例えば addblanks.awk
と呼ぶことにします) は有用で、データファイルに、
第 1 列目の数が変更したときに空行を追加してくれます。
/^[[:blank:]]*#/ {next} # コメント行 (# で始まる行) は無視 NF < 3 {next} # 3 列未満しかない行も無視 $1 != prev {printf "\n"; prev=$1} # 空行を出力 {print} # その行自体を出力これにより、データファイルをコマンド
awk -f addblanks.awk <a.dat
によって前処理するか、
unix 互換のプラットフォーム上でデータファイルを gnuplot> splot "<awk -f addblanks.awk a.dat"
のように描画するか、
のどちらかを行ってください。
set view 180,0 とするよりも、むしろ set view map; unset surface か、 set pm3d map を使ってください。 後者は行列やデータファイルの地図グラフの描画を楽にしてくれます。 しかも、データの行列化 (格子化) の必要もありません。 pm3dCompress.awk や pm3dConvertToImage.awk による後処理によって、 生成される postscript ファイルのサイズを小さくすることも可能です。
2 次元のカラー画像の描画用には、描画スタイル with image
や with rgbimage
なども用意されています。
pm3d スタイルの explicit スイッチ (implicit も参照のこと) を使ってください:
gnuplot> set pm3d explicit gnuplot> splot x with pm3d, x*y with points
えっと、見つけるのは難しいかもしれませんが、それは実に簡単:
unset clabel
set contour both; set cntr levels 100 unset clabel unset surface splot x*y with line lt -1 pause -1 splot x*y with line palette
他のやり方としては、set table
を利用して等高線を
一時ファイルに書き出す手があります:
set contour base; set cntrparam levels 15; unset surface; set view map splot x*x+y*y; pause -1 set table 'contour.dat' replot unset tableこの後で、2 次元描画するには次のようにします。
reset plot 'contour.dat' with line -13 次元描画する場合は次のようにします。
reset # 1 行の空行を 2 行の空行に変換 !awk "NF<2{printf\"\n\"}{print}" <contour.dat >contour1.dat splot 'contour1.dat' with line -1質問 "pm3d 色地図/曲面グラフに等高線を重ねるには" も参照してください。
z の値による等高線のラベルは、
適当な set label
コマンドを
自動的に生成してくれる適当なスクリプトで実現できるでしょう。
そのような一つが gnuplot スクリプトのページ http://gnuplot.sourceforge.net/scripts/index.html#tricks-here
にあります。
これは、等高線を table 出力形式を利用して一時ファイルに書き出し、
そしてそれを set contours を使わずに描画する必要があります。
次の例は色地図グラフのデモですが、
曲面グラフの場合は set pm3d map
を削除して set ticslevel 0
を入れます。
# 関数 x*x-y*y の等高線を一時ファイルに書き出す set contour base; set cntrparam level 20 unset surface set table 'contour.dat' splot x*x-y*y unset table # 1 行の空行を 2 行の空行に変換 !awk "NF<2{printf\"\n\"}{print}" <contour.dat >contour1.dat # グラフの描画 reset set palette gray set palette gamma 2.5 set pm3d map set pm3d explicit splot x*x+y*y with pm3d, 'contour1.dat' with line lt -1 !rm contour.dat contour1.dat最後のコマンドは 2 つの一時ファイルを削除します。
3 次元物体の面に色をつけて描画するには、 ファイルを以下のような形式で作成すれば可能です。
# 三角形 1 x0 y0 z0 <c0> x1 y1 z1 <c1> x2 y2 z2 <c2> x2 y2 z2 <c2> # 三角形 2 x y z ...
1 行の空行と 2 行の空行の位置に注意してください。 <c> はオプションの色指定です。
これを以下のようにして描画します (どちらかの splot で):
set pm3d set style data pm3d splot 'facets.dat' splot 'facets_with_color.dat' using 1:2:3:4
曲面の線は、 set style data pm3d か、splot ... with pm3d で無効にできることに注意してください。
上の例では、pm3d は三角形をそれぞれ独立な曲面として描画します。 それらは、データファイル中に他のものが見つかったときに その後で一つの曲面に描かれます。 重なる部分は 2 次元射影では重なって描画されてしまいます
gnuplot は 3 次元モデリングプログラムではなく、 隠線処理ルーチンは点、線には適用されますが、面には適用されません。 面の集まりとしてのデータの処理なしには、 影に隠れる面を作ることはできません。 'hidden3d' アルゴリズムは、入力データを 2 つの方法で使って実行されています: 一つは、曲面を構成する三角形 (格子点の四角形から作られる) の集まりをセットアップすること、 もう一つは端の集まりです。 そしてそのすべての端に対して、 どの部分が他の面の後ろに隠れないのかをチェックし、 そしてそれらを描画しています。
結果として、 gnuplot は曲面や 3 次元の物体を仮想現実としては描画しません。 これは set pm3d map に対してはちゃんと働きますが、 本当の 3 次元にしたいなら、 多面体データを VRML ファイルに変換するソフトを書く方がいいかもしれません。
set palette cubehelix を試してください。
ここに記すには多すぎます。 ソース配布物に含まれるファイル NEWS、 あるいは gnuplot のヘルプドキュメントの "New features" のセクションを 参照してください。
インストール済の gnuplot が使用できるグラフィックドライバの一覧を見るには、
set term
とタイプしてください。
通常の配布物には含まれていても、
デフォルトでは使えないようになっているグラフィックドライバもあります。
それらが使いたければ、gnuplot/src/term.h
を修正して
コンパイルし直す必要があります。
ええ。
gnuplot version 4.2 以降では、横並び型 (clustered) と積み上げ型 (stacked) のヒストグラムスタイルが、 別々のスタイル型としてサポートされています。
それは gnuplotではちょっと面倒です。以下を見てください。 http://http://gnuplot-tricks.blogspot.com/2009/08/pie-charts-entirely-in-gnuplot.html または、以下を参照してください。 http://www.usf.uni-osnabrueck.de/ breiter/tools/piechart/piecharts.en.html
gnuplot ではそれはできません。しかし、以下を見てください。
http://ricardo.ecn.wfu.edu/ cottrell/qplot
そのファイル qplot.zip
は gnuplot の配布サイトの contrib ディレクトリから取得できます。
はい。set multiplot
としてください。
はい。1 つの描画に対して 2 つの x 軸、2 つの y 軸が使えます。
そのそれぞれの 2 つ目の軸は x2, y2 軸と呼ばれます。
help plot
を参照してください。
これは plot "-"
という新しい機能を使えば可能です。
plot "-"
コマンドは描画するデータを標準入力、
または現在のバッチジョブから読み込みます。
gnuplot> plot "-" 1 1 2 4 3 9 e
多くの出力形式 (出力デバイスドライバ) で、「拡張文字処理」モード ("enhanced text" モード) がサポートされていて、 これで上付き下付きの文字が扱えます。 その場合、あなたのシステムにインストールされているフォントの サポートする範囲内で、ギリシャ文字や、数学記号文字も扱えます。
LATEX 出力を行なう出力形式を使って "\\alpha_{3}"
や '\alpha_{3}'
のようにしてみてください。
gnuplot のグラフを LATEX の文書に張り込む場合には、
LATEX パッケージの psfrag を使えば
グラフ内で任意の文字を使うことができます。
もう一つの可能性は MetaPost 出力です。それは TEX の表記法をサポートし、 mpost によって encapsulated PostScript (EPS) に変換します。
ü (u ウムラウト; u の上に点 2 つのアクセント) や n のような文字をラベルに含めるには、 適切なエンコードオプションを設定し、 8bit 文字コードを使用しなければいけません。 例えば次のようにします。
gnuplot> set encoding iso_8859_1 gnuplot> set title "M\374nchner Bierverbrauch \374ber die Jahre" gnuplot> plot "bier.dat" u 1:2
これにより、適切な set encoding により、 チェコ語、仏語、ハンガリー語、露語などのラベルを打ち出すことができます。 しかし、2 種類のエンコード (例えば西ラテンエンコードと東ラテンエンコード) を一つのファイルに混ぜることはできません。
UTF-8 エンコーディングフォントを使うためのより一般的なやり方は、 gnuplot 内で直接 UTF-8 の文字を入力することです。 これは多くの出力形式で動作しますが、残念ながら PostScript ではだめです。 更新情報: バージョン 4.4 の gnuplot では、PostScript を含むより完全な UTF-8 のサポートがなされています。
set size square
か set view equal xy
としてみてください。
可能な出力形式もありますし、そうでないものもあります。 描画全体のフォントサイズを選択できるようなものもあります。 "enhanced text" モードをサポートしている出力形式では 描画内でテキストサイズとフォントの変更が行なえます。 それぞれの出力形式のヘルプを参照してください。
以下のようにデータ値として ? を指定すればできます。
1 2 2 3 3 ? 4 5
set missing も参照してください。 データファイルのコメント文字を指定するには、 set datafile commentschars を参照してください。
これは、例えば plot 'a.dat' every 2
のように、
plot
コマンドに色々なオプションを指定することでできます。
すべての点を通る線を引き、しかし点の記号は n 点毎に書きたい場合は、
plot 'a.dat' with linespoints pointinterval n
としてみてください。
状況によりますが、主な方法は以下の通りです:
set arrow .... .... nohead
この場合、
矢の正確な開始点と終了点の位置を計算しておく必要があります。
簡単です。コマンド plot 'a.dat' でできます。 3 次元描画の場合は splot 'a.dat' です。 ただし、2 つのつながっている線 (孤立線) を分離するのに 空行を出力するのを忘れないでください。 さもないと、データが格子状 (grid) でないというエラーが出るかも知れません。 質問 3.9 も参照してください。 データが格子状でない場合は、 set dgrid3d {色んなオプション} を使用してください。
直接はできません:
gnuplot は replot
コマンドはサポートしてますが、
remultiplot
コマンドはありません。
よって、スクリプトファイル内に set multiplot
から unset multiplot
までのすべてのコマンド列を書く必要があります。
そのスクリプトを gnuplot に load
してやれば、
必要な回数だけ、異なる出力形式、異なる出力ファイルに replot できます。
最初に、それが本当にバグなのか、 それともある set-command で翻すことができる特徴なのかを見極めてください。
次に、あなたが使っている gnuplot が古い版ではないか確かめてください。 もしそうなら、 より新しい版ではその新しいバグは取り除かれている可能性があります。
CVS 開発版は、現在のリリース版以後に報告されたバグの修正を 既に持っている可能性があります。レポートを送る前に、 質問のバグが既に修正されていないかチェックしてみてください。
これらをチェックした後でなおそれがバグであると確信したなら、 以下に進んでください。 もしあなたが公正で普遍的な種類のバグレポートを作ったならば、 多分ニュースグループ ~comp.graphics.apps.gnuplot への投稿が取るべき道でしょう。 もし問題の詳細な調査結果があるならば、 特にそのエラーを際限する簡単なスクリプトを提供できるならば、 それを http://sourceforge.net/tracker/?group_id=2055&atid=102055 の bug-tracker にアップロードしてください。
souceforge の tracker は、バグのレポート、および
後のリリースに反映するためのバグの修正の収集のためのものです。
ニュースグループ ~comp.graphics.apps.gnuplot
は gnuplot に関する問題に対する回避策を見つける、
あるいはそれを実際に解決する手助けのためのものです。
もしバグリポートを送るときは、show version long
コマンドで見れる gnuplot のバージョン (パッチレベルも含めて)、
出力形式のドライバ名 (terminal driver)、オペレーティングシステム、
バグの正確な記述とバグを再現するための入力、
これらを確認しレポートに入れてください。
これらの詳細が示されていなければ、
その問題の解を与えることはほとんど不可能です。
そして、最新の公式版の gnuplot に対して当てた差分 (context diff) も、
可能ならばすべて引用すべきです。
パイプをサポートしているシステムでは、 他のプログラムからパイプ経由で gnuplot にコマンドを渡すことができます。 Octave (http://www.octave.org) のように、 gnuplot をグラフィックエンジンとして使用している多くのアプリケーションが この方法を使用しています。 これは、form ベースの Web ページから gnuplot を起動する cgi スクリプトでも 利用できます。
John Campbell ([email protected]) は、 かなり前の版 (3.5) の gnuplot を改良して、 C プログラムから呼び出せる C のサブルーチンライブラリに作り上げました。 gnuplot はその後劇的に変化しましたが、 現在の版に基づく同様のライブラリを作成するような計画は我々は知りません。
たくさんの拡張やパッチが、gnuplot の開発サイト http://sourceforge.net/tracker/?group_id=2055&atid=302055 の "Patches" ページにあります。 最新の開発版は、 gnuplot の今後の正式リリースに含ませるためのデバッグをしながら、 だいたいこれらのいくつかを含んでいきます。
現在の版では動くかどうか分かりませんが、 古い拡張は ftp.ucc.ie の /pub/gnuplot/contrib/ にあります (訳注: 現在 (03/14 2005) はそこにはないようです)。
現在以下のような拡張がなされています:
gnuplot は今までも、そして現在も描画プログラムであり、データ処理や数式 処理プログラムではありません。よってそのようなことはできません。積分の 基本的な実装については demo の "bivariat.dem" を見てください。
より高級なデータ処理については次のセクションを読んでください。
gnuplot 単独ではあまりそれには適していません。 fudgit を試してみるといいでしょう。これは Martin-D.Lacasse によって 書かれた対話型多目的曲線当てはめプログラムです。 これは背後でグラフィック出力のために gnuplot を用います。
Michael Courtney は lsqrft と呼ばれるプログラムを書きました。 これはデータを関数に当てはめるのに Levenberg-Marquardt アルゴリズムを使用します。 Unix でコンパイル可能なソース、そして MS-DOS, OS/2 用の実行バイナリは hobbes.nmsu.edu の /pub/os2/apps/analysis/lsqrft15.zip にあります。 OS/2 プレゼンテーションマネージャに対するインターフェースもあります。
NCSA (National Center for Supercomputing Applications) の STG (Software Tools Group) によって開発されたアプリケーションが見たければ、 詳細は ftp.ncsa.uiuc.edu に ftp して、README.BROCHURE を取得してください。
pgperl を試してもいいでしょう。 これは Perl 5 によって PGPLOT プロットパッケージを統合したものです。 これに関する情報は http://www.ast.cam.ac.uk/AAO/local/www/kgb/pgperl で見つかりますし、 ソースは ftp.ast.cam.ac.uk の /pub/kgb/pgperl/、 または linux.nrao.edu の /pub/packages/pgperl/ にあります。
他の方法として Octave があります。README を引用します: Octave は高水準言語で、主に数値計算用です。 Octave は GPL ライセンスに従い、原則的にフリーな Matlab クローンです。 線形や非線形の問題を数値的に解くのに便利な コマンドラインインターフェースを備えています。 Octave の最新版は常に http://www.octave.org にあります。 ところで、octave は gnuplot を描画エンジンとして使いますので、 gnuplot に追加するデータ処理プログラムを手に入れることになります。
最後に、scilab も http://www.scilab.org にあります。 これは matlab とほぼ同様に動作します。 これもフリーですが著作権は放棄されていない (GPL ではない) ソフトウェアです。
マウスが効かない場合、その対話型ターミナルで 'm' を打ってみてください。 これはマウス機能の On/Off を行ないます。 サポートしている対話型ターミナルの一覧については以下を参照してください。
それでもまだ動作しない場合、 gnuplot がマウス機能をサポートするように configure されなかったか コンパイルされなかったか、 ちゃんとインストールしなかったか、 あるいは gnuplot の古いバージョンを使っているか (あなたの PATH をチェックしてみてください) でしょう。
gnuplot が X11 上の Octave の描画エンジンとして動作している場合は、 あなたの $HOME/.gnuplot の中に set mouse と入れてください ($HOME/.octaverc の中に gset mouse とするよりいいでしょう)。 以下は gnuplot 4.0 にのみ関することですが、その help x11_mouse によれば、x11 上でパイプを通して gnuplot が起動している場合は x11 描画ウィンドウが起動する前に set mouse を実行する必要があるようです。
対話型ターミナルではいくつかのホットキーが有効になっています。 現在は次の対話型ターミナルがホットキーとマウス機能をサポートしています: OS/2 プレゼンテーションマネージャ (pm), X11, Windows, WX, GGI。 'h' をそのターミナルの中で打つと、ホットキーの一覧が表示されます。 マウス機能やホットキーに関する概要は、 help new-features やドキュメントの Features introduced in version 4.0 セクションを参照してください。 さらに、 help mouse や help bind からも情報が得られるでしょう。
投稿よりもむしろ、 http://sourceforge.net/tracker/?group_id=2055&atid=302055 の 'Patches' セクションを通してコメントするか パッチを更新する方が望ましいです。 [email protected] は、 より活発な議論のための論点を送って頂けるとありがたいです。
gnuplot のベータテストメーリングリストに入ってください。
メール本文 (メールタイトルではなく) に subscribe gnuplot-beta
と書いてメールを [email protected]
に送ってください。
その質問を (回答と一緒に) [email protected] へ送ってください。
パラメータ (parametric) を用いて描画すればいいでしょう。例:
gnuplot> set parametric gnuplot> a=1 gnuplot> b=3 gnuplot> c=2 gnuplot> d=4 gnuplot> x1(t) = a+(b-a)*t gnuplot> x2(t) = c+(d-c)*t gnuplot> f1(x) = sin(x) gnuplot> f2(x) = x**2/8 gnuplot> plot [t=0:1] x1(t),f1(x1(t)) title "f1", x2(t), f2(x2(t)) title "f2"
gnuplot の、数学的に定義されない数式を無視する機能を使うこともできます。
1/0
という数式は黙って無視しますので、例えば
gnuplot> set xran [-10:10] gnuplot> plot (abs(x)>0.5?1/0: x**2)のようにすると 2 乗の関数を
|x| < 0.5
の範囲でのみ描画します。
そのシステムが、Unix のように popen() 関数をサポートしているなら、 他のプロセスの出力を使って実行することが可能です。 例えば、次のような awk の短いプログラムが使えます:
gnuplot> plot "< awk ' { print $1, $3/$2 } ' file.in"
plot コマンドはとても強力で、
データファイルに対するある種の代数処理も可能です。
help plot
を参照してください。
上のフィルタは、Unix やその互換 OS、OS/2 ではスムーズに動作します。 Windows では、これはコンソール版の gnuplot か、 テキストコンソールが追加された GUI 版の wgnuplot_pipes のみがサポートします。 Cygwin 版の gnuplot も、パイプは当然サポートしています。
LATEX とともに gnuplot を使う場合、 それを楽にしてくれるような LATEX のマクロとシェルスクリプトのセットがあります。 そのパッケージは David Kotz によるもので、 ftp.dartmouth.edu の pub/gnuplot/latex.shar にあります。 (訳注: 現在 (03/14 2005) はそこにはないようです。 archie で gnuplot-latex.shar というファイルを探してみてください) 例えば "plotskel" は gnuplot の出力するファイル plot.tex から骨組みのファイル skel.tex を生成します。 それは元のグラフと同じサイズですが、何も描画部分を持ちません。 その骨組みは適切なマクロと共に LATEX コンパイルのテストで使うことができ、 それは後に行なうグラフをちゃんと含んだコンパイルの準備に役立ち、 本来コンパイルにかかる多くの時間を節約してくれます。
それにはsave
とload
のコマンドを使ってください。
詳細はhelp save
とhelp load
を参照してください。
set term push と set term pop を使えば、 ファイルシステムを触ることなく それぞれ現在の出力形式の保存とその後の復帰ができます。
splot のデータファイルのデータがいずれも同じ数のデータ点を持つように (区切りはいつものように空行で) 揃えられている場合、 splot はデータを格子で描画します。 単に曲線だけで書きたいならば、データエントリの個数が異なるように (例えば最後の点だけ同じものを 2 つつけるとか) してください。
例:
gnuplot> f(x,y) = x**2 + y **2 gnuplot> x(u) = 3*u gnuplot> yu(x) = x**2 gnuplot> yl(x) = -x**2 gnuplot> set parametric gnuplot> set cont gnuplot> splot [0:1] [0:1] u,yl(x(u))+(yu(x(u)) - yl(x(u)))*v,\ > f(x(u), (yu(x(u)) - yl(x(u)))*v)
たいていの gnuplot の機能は、対応する set/unset コマンドで制御できます。
デフォルトで有効になっている機能、
あるいは set <feature>
で有効にした機能は、
それを set no<feature>
で無効にできます。
ただ、version 4.0 からはその書式はむしろ unset <feature>
とすべきです。
unix 互換システム上ならば、gnuplot へのコマンドを標準入力 (stdin) からパイプで渡せます。
gnuplot からの print
コマンドは、
名前つきパイプで読み出すことができます。
Windows では、GUI プログラムで標準入力 (stdin) が使えないため、
コンソール版の gnuplot (推奨) か、
テキストコンソールが追加された GUI 版の wgnuplot_pipes のいずれかを使う必要があります。
古い pgnuplot というヘルパープログラムも
まだ配付ッケージに含まれています。
最も自然な方法は、UTF-8 フォントを使い、文字 (Unicode コード ポイント #x210F) を直接入力することです。
しかし、これは PostScript ではうまくいきませんので、例えば次のような
次善の策を用いる必要があります:
@{/=56 -} {/=24 h}
または {/=8 @{/Symbol=24 -} _{/=14 h}}
後者では 24pt (ポイント) の "-"
(/Symbol フォントの中の長いハイフン) がスペースなしで使われます。
14pt の "h" は 8pt のスペース ("_" の前にあるスペース) だけずらされて置かれますが、
それは下付き文字として書かれるので小さい文字になります。
しかしそれらは通常我々が使用するプランク定数の記号とは違っていて、
横線は斜線ではなく水平線になります。
アクセント記号なども使ってみましたが (iso-latin-1 エンコーディングの文字 264 など)、
その大きさと位置を正しくする方法を見つけることはできませんでした。
もう一つの方法は {/=14 @^{/Symbol=10 -}{/=14 h}}
とすることです。
AMS-LaTeX の PostScript フォント(http://www.ams.org/tex/amsfonts.html
にあり、
そして多くの LaTeX 配布にも含まれています) を使えば、
とても簡単に小さい Planck 定数をセットすることができますが、gnuplot (help fontpath
を参照) と、
PostScript インタープリタ (通常 Ghostscript) が
ファイル msbm10.pfb
(または msbm10.pfa
) が
どこにあるかを知る必要があります。"h" に傾斜のついた横棒を重ねた \hslash
を生成するには {/MSBM10 \175}
を使ってください。
通常の \hbar
(水平の横棒) は 8 進数の 176 です。
ただし、水平の横棒はイタリック体としてしか存在しないことに注意してください。
Planck 定数と同様、最も自然な方法は UTF-8 フォントを使い、文字 (Unicode コードポイント #2299; "circled dot operator") を直接入力することです。 非常によく似たグリフがコードポイント #x2609 にもあります。 これは "sun" で、よりいいかもしれませんが、 それを持つフォントは多くはありません。
うーん、多分それは全く何も出力したくないわけではなくて、 タイトルだけのものを出力したいじゃないでしょうか (multiplot のページの他のグラフに重ねるような):
reset; unset xtics; unset ytics unset border; unset key set title 'Title on an empty page' plot [][0:1] 2
上、下、左、右の境界位置を、ページ内の位置として小数単位で指定してください:
set lmargin at screen 0.05 set bmargin at screen 0.05 set rmargin at screen 0.95 set tmargin at screen 0.95
gnuplot は、それ自身ではフォント処理を行いませんので、 それは必然的に個々のデバイスをサポートするライブラリに任せることになります。 残念ながらこれは、フォントの検出においては、異なる出力形式には 異なる説明が必要だということを意味しますので、 ここでは、簡単なヒントをいくつか上げておきます。 詳しい情報については、あなたが問題にしている出力形式用の gnuplot のドキュメントを参照してください。
setenv GNUPLOT_DEFAULT_GDFONT verdana
set term x11 font "mbfont:sazanami mincho,vera,20"
$ gnuplot_x11 :== $disk:[directory]gnuplot_x11 $ gnuplot :== $disk:[directory]gnuplot.exe $ def/job GNUPLOT$HELP disk:[directory]gnuplot.hlb
そして gnuplot をコマンドラインから起動し、
set term x11
としてください。
Unix 上で gnuplot を動かす場合は、
最新の gnuplot_x11
が検索パスの最初に現われているか確認してください。
コマンド which gnuplot_x11
が参考になるでしょう。
gnuplot はデフォルトでは 1e-08 より小さい全ての数を 0 として扱います。 よってとても小さい数の集まりを描画しようとすると それらは 0 として描画されてしまいます。 対数軸で描画する場合は、 もっとひどいことにそれらは目盛りからはずれてしまいます。 また、全ての数が "0" である場合、 範囲は空であるとみなされます (訳注: gnuplot 3.6 以前の仕様):
gnuplot> plot 'test1' Warning: empty y range [4.047e-19:3e-11], adjusting to [-1:1] gnuplot> set yrange [4e-19:3e-11] gnuplot> plot 'test1' ^ y range is less than `zero`
その対策は gnuplot の "zero" の概念を変更することです。
gnuplot> set zero 1e-20
より詳しい情報については help set zero
を参照してください。
それはちゃんと描いているんですが (スクリプトファイルにエラーがなければ)、 スクリプトが完了したときに描画がすぐに消えている、 ということは明白です。
解 1: ファイルの、plot コマンドの下に pause -1 を追加してください。
解 2: gnuplot filename.gp -
(そう、ダッシュを最後の引数にします) を使ってください。
これにより、スクリプトが完了したら対話型モードに移行します。
解 3A: X-Window System ならば、
gnuplot の -persist
オプションを使うこともできます。
その場合、X11 の描画ウィンドウは開いたままになります。
そのウィンドウを閉じるにはその上にフォーカスを持って行って "q" をタイプしてください。
解 3B: M$ Windows では、-persist
オプション、
あるいは /noend
オプションが使えます。
解 4: OS/2 PM 出力形式では、set term pm persist
、
または set term pm server
を使用してください。
X11 出力形式では set term x11 persist
としてみてください。
gnuplot は整数の式の場合、実数演算ではなく整数演算を行ないます。 例えば式 1/3 は 0 と評価されます。 もし実数の値が欲しいならば、その数の後にドット "." をつけてください。 例:
gnuplot> print 1/3 0 gnuplot> print 1./3. 0.333333
整数の式をこのようにして評価するやり方は C や Fortran でも行なわれています。
set output
によって出力をクローズして、
たまっている出力を吐き出させる必要があるかも知れません。
出力形式によっては、一つの出力ファイルに複数のページが含まれています (postscript, pdf, latex, svg, ...)。
これらの出力モードでは、gnuplot はあなたが描画の追加ができるように
各描画後にファイルをオープンしたままにしています。
よってあなたが明示的にそれをクローズする (set output
または unset output
) か、異なる出力形式を選択する (set term
) か、
または gnuplot を終了するまでは、そのファイルは完全ではなく、
外部のアプリケーションでは使用できるようにはなっていません。
単一 'ページ' のみを持つ出力形式 (png, emf, ...) では
このような問題に悩まされることはないでしょう。
裸の LATEX2e は今はコマンド "\Diamond" も "\Box" も持っておらず、 それらは今は latexsym パッケージに入っています。 また、amssymb パッケージの他の記号も使います。 これらはいずれも LATEX の基本配布物には含まれていて、 よって任意の LATEX システムには含まれています。 これらのパッケージをあなたの文書に入れることを忘れないでください。
次のような短い Perl スクリプトを使って gnuplot を呼び出せます:
#!/usr/local/bin/perl -w open (GP, "|/usr/local/bin/gnuplot -persist") or die "no gnuplot"; # force buffer to flush after each write use FileHandle; GP->autoflush(1); print GP,"set term x11;plot '/tmp/data.dat' with lines\n"; close GP
gnuplot は終了時にその描画ウィンドウを閉じます。
close GP
コマンドが実行されると、
描画ウインドウを目にする前でさえも閉じられてしまいます。
それに対する対処は 3 つあります:
1 つ目は、gnuplot 内で pause -1
コマンドを、
パイプを閉じる前に使用すること、
2 つ目は、gnuplot と描画ウィンドウが不要になったときにのみ
パイプを閉じるようにすること、
3 つ目はコマンドラインオプション -persist
を使うことです。
このオプションは X-Window System に描画ウィンドウを開いたまま残します。
gnuplot 3.7 の主な寄与者は (アルファベット順で)、 Hans-Bernhard Broeker, John Campbell, Robert Cunningham, David Denholm, Gershon Elber, Roger Fearick, Carsten Grammes, Lucas Hart, Lars Hecking, Thomas Koenig, David Kotz, Ed Kubaitis, Russell Lang, Alexander Lehmann, Alexander Mai, Carsten Steger, Tom Tkacik, Jos Van der Woude, James R. Van Zandt, Alex Woo です。 さらに version 4.0 への重要な寄与者として、 include Ethan Merritt, Petr Mikulík, Johannes Zellner がいます。 version 4.2, 4.4, 4.6 のリリースは Ethan Merritt が取りまとめました。
このリストは Russell Lang, John Campbell, David Kotz, Rob Cunningham, Daniel Lewart, Alex Woo の寄与を John Fletcher が最初にまとめたものです。 そして、Alex Woo の草案により、 Alex Woo, John Campbell, Russell Lang, David Kotz らの修正と追加、 Daniel Lewart による多くの修正が Thomas Koenig によりまとめ直されました。 そして、gnuplot 3.7 用に再び Lars Hecking, Hans-Bernhard Broecker およびその他の人々による修正が Alexander Mai と Juergen v.Hagen によりまとめ直されました。 gnuplot 4.0 用の修正は、 Petr Mikulík と Ethan Merritt により行なわれました。 gnuplot 4.2 用の修正は、 Petr Mikulík と Ethan Merritt により行なわれました。 gnuplot 4.4 用の修正は、 Ethan Merritt により行なわれました。
(訳注: 日本語訳は Shigeharu TAKENO ([email protected]) により 行なわれました。)
この文書はLaTeX2HTML 翻訳プログラム Version 2008 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds,
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
を日本語化したもの( 2008 (1.71) JA patch-2.1beta1.13 版)
Copyright © 1998, 1999,
Kenshi Muto,
Debian Project.
Copyright © 2001-2011,
Shige TAKENO,
Niigata Inst.Tech.
を用いて生成されました。
コマンド行は以下の通りでした。:
latex2html -split 0 -show_section_numbers -nobottom_navigation -init l2h-init faq-ja-20120309.tex.
翻訳は 竹野茂治 によって 2012年3月14日 に実行されました。