gnuplot FAQ

この文書は、gnuplot バージョン 5 についての記述です。
FAQ バージョン: 2019 4 月


目次

0 メタな質問

0.1 このドキュメントはどこで手に入れられますか

このドキュメントの最新版は、Web 上の http://www.gnuplot.info/faq/ にあります。

0.2 このドキュメントに関するコメントはどこに送れば良いですか

コメント、提案等は開発者向けメーリングリスト [email protected] に送ってください。

1 一般的な質問

1.1 gnuplot とは何ですか

gnuplot はコマンド駆動型の描画プログラムです。関数の描画、 およびデータ点の描画を、2 次元、3 次元の両方で、 そして多くの異なるスタイル、多くの異なる出力形式で行うことができます。 また、gnuplot は自動的にグラフを生成するスクリプト言語としても 使用することができます。 これは主に科学的なデータを画面表示するものとして設計されています。 gnuplot の著作権は保護されていますが、自由に配布でき、 代金を払う必要はありません。ソースコードのダウンロードも歓迎します。

1.2 それはどこから来て、そしてなぜ 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 もそれに同意したのです。

1.3 gnuplot は何を提供してくれますか

1.4 gnuplot はスクリプトに適していますか

ええ。gnuplot は対話型実行中に 追加コマンドを含むファイルを読み込むことができますし、 既に存在するファイルや標準入力からのコマンド列を パイプを使ってバッチモードでそれを処理することもできます。 gnuplot は、Octave のような高水準な数学パッケージの背後で実行する グラフィックドライバとして使われていますし、 cgi スクリプトでラップすることで 容易に Web 起動型の描画生成ツールとして使うこともできます。 gnuplot は、なじみのある命令 if else continue break while for を 用いた文脈駆動型、データ駆動型の処理制御、 および繰り返しをサポートしています。

1.5 gnuplot は私のコンピュータで動かすことができますか

gnuplot は、MS Windows, linux, unix, OSX などの 多くのプラットホーム上で、広く利用できます。 現在のソースコードは、VMS, Ultrix, OS/2, MS-DOS などの古いシステムのサポートも保持していますが、 16 ビットプラットホームはもうサポートしていません。

gnuplot のソースは、それなりに標準的 (ANSI/ISO C, POSIX 等) な環境から 多少外れたものの上でもコンパイルできるでしょう。

1.6 ライセンスについて

gnuplot はボランティアの集団によって作られたものです。 彼らは gnuplot 、およびその使用の許可、 不許可に関する法的な文書を作成できません。また何の保証もありません。 自分自身の責任で使用してください。

gnuplot は、無償であると言う意味でフリーウェアです。 gnuplot をあなたが望むように使用し、改変することができますが、 改変したものを配布することについてはある種の制限がつきます。 Copyright というファイルの modification (改変) と redistribution (再配布) の項目を読んでそれに従ってください。

1.7 gnuplot は FSF や GNU プロジェクトと何か関係があるのですか

gnuplot は FSF が作ったのでも FSF がメンテナンスしているのでもありません。 一時期 FSF から配布されていたこともありますが、 しかし現在はこれは正しくありません。 gnuplot は、GNU General Public License (GPL) に全く保護されていません。

1.8 更なる情報はどこで手に入りますか

gnuplot Web ページ http://www.gnuplot.info を見てください。

英語以外の他の言語での文書や入門書もあります。 最新のリストについては、http://gnuplot.sourceforge.net/help.html の "Localized learning pages about gnuplot" の節をご覧ください。

2 インストール

2.1 gnuplot の最新バージョンは

gnuplot の最新の安定版は、2017 年 9 月に最初にリリースされた 5.2 です。 更新バージョン (パッチレベル 1, 2, ...) は、だいたい 6 ヶ月毎に リリースされます。 gnuplot の開発版は、現在は 5.3 となっています。


2.2 gnuplot はどこで手に入れられますか

初めに最も適切な場所は http://www.gnuplot.info です。 ここから、例えば SourceForge 上の開発プロジェクトサイト http://sourceforge.net/projects/gnuplot などの、 色々なサイトの場所を見つけられるでしょう。

ソース配布物 ("gnuplot-5.2.6.tar.gz" または同様の名前) は公式の配布サイト http://sourceforge.net/projects/gnuplot にあります。

2.3 gnuplot の最新の開発版はどこで手に入れられますか

gnuplot の開発版は、git リポジトリに保持されていて、以下に示すように クローンを手元で作成し、ソースを調べたり、 実行プログラムをソースから作成したりできます。

  git clone https://git.code.sf.net/p/gnuplot/gnuplot-main gnuplot

開発版に対する質問は必ず [email protected] に送ってください。

2.4 gnuplot は私のシステムではどうコンパイルすれば良いですか

リリースノートと README, INSTALL のファイルを 読んでください。C と C++ コンパイラが必要で、様々なサポートライブラリが あらかじめインストールされている必要もありますが、 それはどのような設定オプションを選択するかによりますし、 作成する実行ファイルにどの出力形式をサポートさせたいかにもよります。

2.5 ドキュメントはどこですか、それはどうすれば手に入れられますか

ソース配布物に完全なドキュメントが PDF ファイル形式で含まれています。 個々のセクションは、gnuplot の作業中に help キーワード を 打つことで見ることができます。 ドキュメントの他の形式も、docs サブディレクトリ内で ソースからコンパイルできます。

http://gnuplot.sourceforge.net/documentation.html に、 英語版と日本語版のコピーが置いてあります。

2.6 動作するサンプル

ソース配布物には動作するサンプルのディレクトリが含まれています。 これらサンプル、およびその結果の描画グラフは http://gnuplot.sourceforge.net/demo/ でも見ることができます。

2.7 私の gnuplot にどのオプションがコンパイルされているかを 知るには

コンパイル済みの gnuplot が与えられている場合、show コマンドで、 それがコンパイルされたときに使用されたコンフィグレーションと ビルドオプションの一覧を表示できます。 あなたの gnuplot に組み込まれている出力形式 ("terminal" とも言います) は、 set terminal で表示できます。

gnuplot> show version long
gnuplot> set terminal

3 動作

3.1 ヘルプはどうすれば手に入れられますか

最初のプロンプトで help コマンドを実行してください。 その後キーワードをたどっていってください。 help plothelp set から始めるのがいいでしょう。

質問をする際は、あなたが使用している gnuplot のバージョンと オペレーティングシステムについても言及する必要があります。 あなたのやり方で期待したようにはうまくできなかったグラフについて 質問したいときは、 その問題を持つグラフを生成するような最小の gnuplot コマンド列を 示すようにしてください。

3.2 どうすればグラフをプリントアウトできますか

plot コマンドが生成するものの出力形式は、 その前の set terminal によって決定します。 対話型でない出力に対しては、ファイル名を指定するために これと set output コマンドを組にして実行します。

以下の例の作業は、まず sin(x) のグラフをスクリーン上に描画し、 同じグラフを PDF 出力ファイルとして再描画します。 注意: PDF 出力は、スクリーン上に表示されるグラフと完全には 同じにならない可能性があります。

gnuplot> plot sin(x)
gnuplot> set terminal pdf
Terminal type is now 'pdfcairo'
Options are ' transparent enhanced fontscale 0.5 size 5.00in, 3.00in '
gnuplot> set output "sin.pdf"
gnuplot> replot
gnuplot> unset output       # 出力ファイルを閉じる (でないと開いたまま)
gnuplot> unset terminal     # デフォルト対話型出力形式に戻す
gnuplot>

出発点が、デフォルト対話型出力形式でない場合は、 同じことを pushpop で達成できます。

gnuplot> set terminal push   # 現在の出力形式を保存 (デフォルでなくてもよい)
gnuplot> set terminal pdf
gnuplot> set out 'a.pdf'
gnuplot> replot
gnuplot> unset out
gnuplot> set term pop        # 保存した出力形式を復帰

対話型出力形式の中にはそのツールバー上にプリンタアイコンを提供する ものもあります (win, wxt, qt 等)。 それは、他の出力形式を使用するのではなく、 システムに用意されている一般的なシステムツールを使い、 現在のグラフを印刷するか、またはファイルに保存します。 すなわち、印刷メニューで "save to png" を選択して得られるファイルは、 set term png; replot; によって得られるファイルとは 違うものになります。 一般に、この方法で保存したグラフは、コマンドラインから出力形式を変更して 作成したものよりも、よりスクリーン画像に近いものを生成するでしょう。

3.3 どうすればグラフを私のワープロソフトに取り込めますか

基本的に、グラフをそのワープロソフトが理解できる形式のファイルに保存すれば、 そのワープロソフトで読み込むことができるでしょう。 後で正しいサイズに変換もできるという点で、ベクトル形式のフォーマット (PostScript, emf, svg, pdf, TEX, LATEX) の方がいいでしょう。

使用できるファイル形式の一覧を見るには set term としてください。

多くのワープロソフトは Encapsulated PostScript (*.eps) のグラフを取り込めます。 gnuplot では、
set terminal postscript eps または set terminal epscairo を使うことで eps 出力を選択できます。 gnuplot は、出力する EPS ファイルにプレビュー用のビットマップ画像を 埋め込みませんので、ワープロソフトに対応させるために、 そのファイルをワープロソフトに取り込む前に、外部ツールを使って 自分自身でプレビュー画像を追加しないといけない場合もあるかもしれません。

LibreOffice や Microsoft Office 等のアプリケーションには、 EMF 形式のベクトル画像を処理できるものがあります。 そのような画像ファイルは emf 出力形式でも作れますし、 windows 出力形式の描画ウィンドウのツールバーから 'Save as EMF...' を選択することでも作れます。

LibreOffice は SVG 形式も、AutoCAD の dxf 形式も読みこむことができます。

gnuplot を使って TEXLATEX 文書に取り込むためのグラフを作る方法は 何通りもあります。 取り込む *.tex ファイルの断片を直接生成する出力形式もありますし、 \includegraphics コマンドを使って取り込むための *.eps, *.pdf, *.png 出力を生成するものもあります。 epslatex と cairolatex 出力形式は、画像ファイル (*.eps か *.pdf) と それを参照する *.tex 文書ファイルの両方を生成します。 tikz 出力形式は、テキストとグラフを生成し、 その出力を pdflatex で処理すれば PDF ファイルが作成できます。

大抵のワープロソフトはビットマップ画像 (png, pbm 等) を取り込むことができますが、 この方法の短所は、 そのグラフが gnuplot によって生成されたときのサイズによって その解像度が制限されてしまうことです。 一般に、文書が最終的にプリントアウトされる解像度よりも その解像度はかなり低くなります。

3.4 どうすれば gnuplot のグラフを編集や後処理できますか

これはあなたが使う出力形式に依存します。

3.5 どうすれば現在の設定を保存/再利用できますか

それには save "filename"load "filename" のコマンドを 使ってください。

3.6 一つのファイルに gnuplot のコマンドとデータの両方を書けますか

gnuplot のバージョン 5 では、「ヒアドキュメント」形式での 名前付きデータブロックをサポートしています:

gnuplot> $DATABLOCK << EOD
  cats 4 2
  dogs 1 4
EOD
gnuplot> plot $DATABLOCK using 2:3:1 with labels

名前付きデータブロックは一度定義すれば、それを何度でも使うことができます。

データは、plot コマンド上で疑似ファイル指定 plot "-" を 行ってインライン形式で与えることもできます。 この場合は、データは一度しか使えません。

gnuplot> plot "-"
1 1
2 4
3 9
e

3.7 どうすれば描画前にデータにフィルタをかけられますか

あなたの使用する OS が popen() 関数をサポートしているなら、 他のプログラムやシステムユーティリティを plot コマンドの 一部分として使用して入力データをフィルタリングすることができます。

gnuplot> plot "< sort +2 file.in"  # 2 列目のデータで事前にソート

この仕組みは、Unix 由来のコマンドラインツール awk, sort, grep などと組み合わせて使用するととても強力です。

3.8 私のプログラムで gnuplot のルーチンを利用できますか

パイプをサポートしているシステムでは、 他のプログラムからパイプ経由で gnuplot にコマンドを渡すことができます。 Octave (http://www.octave.org) のように、 gnuplot をグラフィックエンジンとして使用している多くのアプリケーションが この方法を使用しています。 これは、form ベースの Web ページから gnuplot を起動する cgi スクリプトでも 利用できます。

4 グラフの見た目のカスタマイズ

4.1 色や線や点記号のデフォルト属性を調べたり変更するには

複数の要素に対する plotsplot コマンドを実行した場合、 gnuplot は、デフォルトでは色と線種の集合を巡回的に使用します。 これは、その plot コマンド に特定の色や線種属性を指定することで 変更できますし、デフォルトの列を変更することもできます。 以下のコマンドは、それぞれ追加パラメータをたくさん指定できます。

4.2 陰線処理、隠面処理

2 つの関連するコマンドがあります。 set hidden3d は、3 次元描画スタイル splot ... with lines で 描画する曲面に影響を与えます。 それは、他の 3 次元描画スタイルで生成され、それらの曲面で隠される線分を クリッピングします。 しかし、pm3d モードで生成されるグラフは処理しません。 with pm3d, with zerror, with boxes の スタイル、および set pm3d が有効な最中に描かれた 様々な描画要素についても同様です。 これらのグラフに対する隠面処理は、 見る側からの距離の順番で それらを描画することによって代用的に達成されていますが、 その順番は、set pm3d depthorder で制御できます。

4.3 グラフの境界をページの特定の位置に丁度合わせるには

上、下、左、右の境界位置を、ページ内の位置として比率で指定してください:

set lmargin at screen 0.05
set bmargin at screen 0.05
set rmargin at screen 0.95
set tmargin at screen 0.95

4.4 複数のグラフをひとつのページ内で隣同士に配置するには

あなたが必要とするコマンドは set multiplot です。 gnuplot は指定した数のグラフを規則的な升目状に配置します (set mulplot layout <rows>, <columns> ...)。 または、それらを set originset size を使って ひとつずつ位置を決めることもできます。

4.5 縦と横の軸の目盛りを 1:1 にできますか

set size squareset view equal xy としてみてください。

4.6 カラーとモノクロの両方の出力で機能するようなパレットは

set palette cubehelix を試してください。

4.7 どうしたらデータ点をスキップできますか

以下のようにデータ値として ? を指定すればできます。

        1 2
        2 3
        3 ?
        4 5

set missing も参照してください。 データファイルのコメント文字を指定するには、 set datafile commentschars を参照してください。

4.8 どうしたら n 点毎にデータを扱えますか

これは、例えば plot 'a.dat' every 2 のように、 plot コマンドに色々なオプションを指定することでできます。 すべての点を通る線を引き、しかし点の記号は n 点毎に書きたい場合は、
plot 'a.dat' with linespoints pointinterval n としてみてください。

4.9 どうしたら鉛直線を書けますか

状況によりますが、主な方法は以下の通りです:

5 良く質問されるグラフの形式

5.1 アニメーション

gnuplot 出力形式で直接アニメーションファイルを出力できるのは 以下のもの (gif) だけです:

set terminal gif animate {delay <time>} {loop <N>} {optimize}

デモの中の http://gnuplot.sourceforge.net/demo/animate.html も参照してください。

5.2 陰関数のグラフ

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 $TEMP
gnuplot> splot f(x,y)
gnuplot> unset table
gnuplot> plot $TEMP w l

その仕掛けは、曲面 z=f(x,y) の 1 本の等高線 z=0 を描き、 その等高線のデータを一時ファイルやデータブロックにセーブすることにあります。

5.3 2 つの関数の間の領域を塗りつぶすには

2 つの関数 f(x) と g(x) の間を塗りつぶすグラフは、 疑似ファイル '+' と filledcurves を使えば簡単にできます。

f(x)=cos(x); g(x)=sin(x)
set xrange [0:pi]
plot '+' using 1:(f($1)):(g($1)) with filledcurves

注意してもらいたいのですが、 上の例のスクリプトは 2 つの曲線の間の領域を塗りつぶすものであって、 どちらが他方の上であるかを考慮はしません。もし、 g(x)<f(x) か、または f(x)<g(x) を満たす領域のみを塗り潰したいなら、 filledcurves の後ろに abovebelow の キーワードを追加してください。

5.4 3 次元データの 2 次元射影を描画するには

コマンド set view map は、視角とスケールを調整し、 それに続く splot による 3 次元グラフを、 plot による 2 次元グラフとほぼ同じレイアウトで表示してくれます。

5.5 pm3d 色地図/曲面上に dots/points の散布図を重ねるには

pm3d スタイルの explicit オプションを使ってください:

gnuplot> set pm3d explicit
gnuplot> splot x with pm3d, x*y with points

5.6 ラベルつきの等高線を描画するには

個々の等高線にラベルをつけたグラフは、gnuplot バージョン 4 では ある種の裏技と余分な処理手順が必要でしたが、 バージョン 5 ではその手順はとても簡単です。 等高線を、1 回目は "with lines" で、2 回目は "with labels" で 2 回描画するだけです。 目立つラベルを作成したい場合は、以下のようにするといいでしょう。

set style textbox opaque noborder
set contours
splot 'DATA' with lines, 'DATA' with labels boxed

5.7 gnuplot は棒グラフ/ヒストグラム/箱型グラフが書けますか

gnuplot は、あらかじめ表形式にされたデータを表示するための、 さまざまな横並び型 (clustered) と積み上げ型 (stacked) の ヒストグラムスタイルをサポートしています。 また、生のデータを場所毎に累積するためのいくつかのオプションも提供していて、 それを切り替えて棒グラフとして表示させることも可能です。 マニュアルの binssmooth frequency の部分を 参照してください。

5.8 gnuplot は円グラフが書けますか、四半期グラフはどうですか

円グラフは gnuplot ではちょっと面倒ですが、以下を見てください。 http://gnuplot.sourceforge.net/demo/circles.html または、以下を参照してください。 http://gnuplot-tricks.blogspot.com/2009/08/pie-charts-entirely-in-gnuplot.html

デモの中には単純なガントチャートの例があります。

5.9 gnuplot は一つのグラフで複数の y 軸を使えますか

はい。2 次元グラフでは別々に x 軸を下 (x1) と上 (x2) に 持つことができますし、別々に y 軸を左 (y1) と右 (y2) に持つことができます。 バージョン 5 では、with parallelaxes という描画モードで y 軸をさらに追加することもできます。

5.10 小 3 角面で構成される物体を描画するには

3 次元物体の面に色をつけたものをファイルに記述するには、 以下のような形式にすれば可能です。

# 三角形 1
x0 y0 z0 <c0>
x1 y1 z1 <c1>

x2 y2 z2 <c2>
x2 y2 z2 <c2>


# 三角形 2
x y z
...

1 行の空行と 2 行の空行に注意してください。 また、三角形は実際には、4 つの頂点を記述し、 そのうちの 2 つを同一とすることにも注意してください。 <cN> はオプションの色指定です。

これを以下のようにして描画します (どちらかの splot で):

set pm3d
set style data pm3d
set pm3d depthorder
splot 'facets.dat'
splot 'facets_with_color.dat' using 1:2:3:4

gnuplot は 3 次元モデリングソフトではありませんので、 depthorder による描画では、面同士の貫通は処理されません。 本当の 3 次元描画のためには、 多分レイトレーシングソフトを使う方がいいでしょう。

5.11 どうしたら 2 つの関数を重ならないように書けますか

描画する各関数の直前に描かせたい範囲を置いてください。 例えば、実験データと、領域の別の部分をカバーする 2 つの異なる関数モデル f1, f2 を描画するには:

gnuplot> set autoscale x  # x の範囲をデータから取得
gnuplot> plot 'data', [*:0] f1(x), [0:*] f2(x)

5.12 どうしたら splot で格子でない曲線を書けますか

splot への入力データが、各行が同じデータ点数 (通常は空行で分離されている) を持つように揃っていれば、splot はデフォルトではそのデータを 曲面を記述するものとして扱います。 そうでなく個々の曲線を描画したければ、 unset surface, set surface explicit, plot ... nosurface などを組み合わせてみてください。

5.13 どうしたら x-y 平面上で他の関数に制限されている f(x,y) の グラフを書けますか

以下は一つの方法です:

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)

6 文字列の整形と特別な記号

6.1 "enhanced text" モードによる文字列のマークアップ

gnuplot バージョン 5 では拡張文字列モード (enhanced text) が デフォルトで、それは特殊文字を文字列内に埋めこむことによって 文字列のマークアップを示します。

拡張文字処理制御記号
制御記号 結果 説明
^ a^x $a^x$ 上付き文字
_ a_x $a_x$ 下付き文字
@ a@^b_{cd} $a^b_{cd}$ 空ボックス (幅がない)
& d&{space}b d b 指定した長さのスペースを挿入
~ ~a{.8-} $\tilde{a}$ 'a' の上に '-' を、現在のフォントサ
   イズの .8 倍持ち上げた位置に重ね書き
{/Times abc} abc Times フォント、今のサイズで abc を出力
{/Times*2 abc} abc Times フォント、今の倍のサイズで abc
{/Times:Italic abc} abc Times フォント、イタリック体で abc
{/Arial:Bold=20 abc} abc Arial フォント、太字、サイズ 20 で abc

6.2 文字列のマークアップをオンに/オフにするには

この処理モードから、特定のテキスト文字列を除外するには、 キーワード noenhanced を使用してください。 例えば、ファイル名を下付き文字と解釈させないためには:

set title 'Compare file_1.dat and file_2.dat' noenhanced

6.3 特殊文字に関するすべて問題の回答は UTF-8 にすることですか

ええ。

不運にも、特に PostScript 出力の生成時など、 使用するにはかなり厄介な環境がいくつかあります。 UTF-8 のコンピュータ環境で作業をしている場合、 gnuplot でそれを使用する場合には、多分何か特別なことを する必要はないでしょう。 しかしそうでない場合は、出力する際には gnuplot に UTF-8 を 使用することを以下のように伝える必要があります: set encoding utf8

UTF-8 文字列をあなたのキーボードで入力できない場合は、 gnuplot の外でそれを解決するか、 またはその 8 進のエスケープ文字列を 1 バイト毎入力してください。 あなたのキーボードで UTF-8 を生成できるが どのキーストロークで特定の文字列を生成できるかを知らない場合は、 多分適当な文字選択アプリケーションがあなたのデスクトップに ついているでしょう (例えば KDE なら kcharselect、 GNOME なら Character Map)。

6.4 Planck 定数 (h に横線) が必要なときはどうしたらいいですか

最も自然な方法は、UTF-8 フォントを使い、文字 $\hbar$ (Unicode コード ポイント #x210F) を直接入力することです。

PostScript: PostScript では utf8 の処理は面倒なので、 拡張文字列処理 (enhanced text モード) のマークアップと、 多分特別な Symbol フォントを使った擬似的なことをやる必要があります:

@{/=56 -} {/=24 h} または {/=8 @{/Symbol=24 -} _{/=14 h}} 後者は 24pt (ポイント) の "-" (/Symbol フォントの中の長いハイフン) をスペースなしで使います。 14pt の "h" は 8pt のスペース ("_" の前にあるスペース) だけずらして置きますが、 それは下付き文字として書くので小さい文字になります。 しかしそれらは通常我々が使用するプランク定数の記号とは違っていて、 横線は斜線ではなく水平線になります。 もう一つの方法は {/=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 です。 ただし、水平の横棒はイタリック体としてしか存在しないことに注意してください。

6.5 太陽質量記号 (丸に点) が必要なときはどうしたらいいですか

Planck 定数と同様、最も自然な方法は UTF-8 フォントを使い、文字 $\odot$ (Unicode コードポイント #x2299 ; "circled dot operator") を直接入力することです。 非常によく似たグリフがコードポイント #x2609 にもあります。 これは "sun" で、よりいいかもしれませんが、 それを提供するフォントは多くはありません。

6.6 ギリシャ文字や他の特別な記号を使うには

古いやり方として、特別なフォント、例えば Adobe の "Symbol" フォントに 切り替えるために拡張文字処理モード (enhanced text モード) を使用する 方法があります。それは、あなたが出力したい文字に通常の ASCII 文字を 割り当てています。これは、現在でも PostScript 出力には必要でしょう。 しかし、より簡単な方法は、UTF-8 エンコーディングを選択し、 特殊文字を他の文字列と同様にそのまま入力することです。 この方法では、フォントの変更は必要なく、また CJK 文字集合を含む すべての Unicode コードポイントへのアクセスが可能になります。 しかし gnuplot によって作られたファイルを実際に印刷、表示するには、 あなたのコンピュータ、あるいは出力デバイスに適切なフォントが インストールされている必要があります。 gnuplot 自身にはフォントは含まれていません。

いくつかの LATEX 系出力形式 (latex, epslatex, tikz, context, cairolatex) は、生成した文字列を LATEX に渡します。 この場合は、'\alpha_{3}' のような、 通常の LATEX 風の記述が利用できます。

6.7 どうしたらアクセント付きの文字を出力できますか

utf8 ではないエンコーディングを使い続けるのであれば、 ü (u ウムラウト; u の上に点 2 つのアクセント) や n のような文字をラベルに含めるには、 適切なエンコードオプションを設定し、 8 ビット文字コードを使用しなければいけません。 エスケープシーケンスを使って 8 ビットコードを表現することも可能です。 例えば次のようにします。

gnuplot> set encoding iso_8859_1
gnuplot> set title "M\374nchner Bierverbrauch \374ber die Jahre"
gnuplot> plot "bier.dat" u 1:2

しかし、そうでない人は UTF-8 を使うべきで、 そこではそれらは普通の文字になります。

6.8 異なるサイズのテキストを一つのグラフで出力できますか

たいていの出力形式では、デフォルトフォントの名前とサイズを指定できます。 「拡張文字処理」モード ("enhanced text") では、フォント、 および文字サイズやボールド、イタリックの書体を一つのグラフ内で 変更できます。

7 その他

7.1 gnuplot には画像形式 XXX をサポートするドライバはありますか

インストール済の gnuplot が使用できるグラフィックドライバの一覧を見るには、 set term とタイプしてください。

通常の配布物には含まれていても、 デフォルトでは使えないようになっているグラフィックドライバもあります。 それらが使いたければ、ソースからコンパイルし直す必要があります。

7.2 バグを見つけたのですがどうしたら良いですか

最初に、それが本当にバグなのか、 それともある set-command で翻すことができる特徴なのかを見極めてください。

次に、あなたが使っている gnuplot が古い版でないか確認してください。 もしそうなら、新しい版でそのバグは取り除かれている可能性があります。

開発版は、現在のリリース版以後に報告されたバグの修正を 既に持っている可能性があります。レポートを送る前に、 質問のバグが既に修正されていないかチェックしてみてください。

これらをチェックした後でなおそれがバグであると確信したなら、 http://sourceforge.net/p/gnuplot/bugs の bug-tracker で 報告してください。 その際、gnuplot のバージョン (パッチレベルも含む) とそれが動いている オペレーティングシステムも書いてください。 特にそのエラーを再現する簡単なスクリプトを提供してもらえると 大いに助かります。

souceforge の tracker は、バグのレポート、および 後のリリースに反映するためのバグの修正の収集のためのものです。 gnuplot に関する問題に対する回避策を見つける、 あるいはそれを実際に解決するには、 インターネット上に色々存在するフォーラムの方がよい場所でしょう。

7.3 どう追加や拡張がなされていますか、それはどう手に入れられますか

一般的に、現在の開発版は、最終安定リリース版の gnuplot には まだ入っていない機能も入っています。 2019 年 4 月現在、開発版のバージョン 5.3 は、以下を特にサポートしています: -4pt

7.4 "heavy-duty" データを gnuplot で使えますか、 または gnuplot に代わるものはないですか

gnuplot それ自身は、しんどい数値計算にはあまり向いていません。 しかし、かなり大きなデータ集合 (100 万データ点程度) は簡単に処理できます。 簡単ではない関数の評価のための gnuplot の速度が制限を与えてしまうような 特定のアプリケーションを使用したい場合は、 その関数を C か C++ でコーディングして作り、 それをプラグインとして gnuplot で呼び出す、という方法もあります。

さらなる数値計算を必要とする場合は、 以下の 2 つのソフトを調べてみてください:

octave (http://www.octave.org) は、 高水準言語で、主に数値計算用です。 Octave は GPL ライセンスに従い、原則的にフリーな Matlab クローンです。 線形や非線形の問題を数値的に解くのに便利な コマンドラインインターフェースを備えています。 なお、octave は gnuplot を描画エンジンとして使いますので、 gnuplot の上位のデータ処理ソフトを手に入れることにもなります。

scilab (http://www.scilab.org) は、 別の、matlab に代わるオープンソースソフトです。

7.5 gnuplot が持たない特殊関数が必要な場合は

上を見てください。 他のソフトを使うか、カスタムプラグインを書くか、のいずれかが必要です。

7.6 私の対話型ターミナルでホットキーを使うには

ほとんどの対話型出力形式では、再描画、各要素の描画のトグル、 軸のスケールの変更などを行うために、あらかじめ設定されたホットキー、 およびユーザ定義可能なホットキーの両方をサポートしています。 現在有効な gnuplot の描画ウインドウ上で h を打つと、 ホットキーの一覧が表示されます。 さらなる情報については、help mousehelp bind を 参照してください。

7.7 gnuplot の次期バージョンの開発について知りたいのですが どうしたらいいですか

gnuplot のベータテストメーリングリストに入ってください。 メール本文 (メールタイトルではなく) に subscribe gnuplot-beta と書いてメールを [email protected] に送ってください。

8 共通の問題

8.1 助けて! 私のフォントが使えない

gnuplot は、それ自身ではフォント処理を行いませんので、 それは必然的に個々のデバイスをサポートするライブラリに任せることになります。 残念ながらこれは、フォントの検出においては、異なる出力形式には 異なる説明が必要だということを意味しますので、 ここでは、簡単なヒントをいくつか上げておきます。 詳しい情報については、あなたが問題にしている出力形式用の gnuplot のドキュメントを参照してください。

png/jpeg/gif
これらの出力形式は、libgd というサポートライブラリを使用し、 これは環境変数 GDFONTPATH で与えられるディレクトリ内でフォントを探します。 そのように libgd のフォントパスを設定すると、 今度は gnuplot のデフォルトフォントを設定したいかもしれません。 例:
setenv GNUPLOT_DEFAULT_GDFONT verdana
post
PostScript フォント名は、その文書が印刷されるまで参照されませんから、 あなたのプリンタでどのフォントが有効であるかを gnuplot は知りません。 よって、どんなフォント名でも指定することができます。 しかし、gnuplot の出力にフォントを埋め込むことは可能です。それについては、 gnuplot の内部コマンド “help set term post fontfile” で得られる 指示を参照してください。
svg
フォント処理は、ビューワ依存です。
x11
x11 出力形式は、通常の x11 フォントサーバ機構を使用しますが、 少しだけトリッキーな点があり、マルチバイトフォントを使用するためには、 明示的に以下のように指定する必要があります:

set term x11 font "mbfont:sazanami mincho,vera,20"

win
ツールバーの "Options" のプルダウンメニューから "Choose font..." を選択します。
wxt, qt
Linux システムでは、これらの出力形式はシステムの fontconfig ユーティリティが 提供するフォントを使用します。

8.2 qt 出力形式のセッションでの最初のグラフが失敗したり 変なレイアウトになります

"slow font initialization" というエラーメッセージも出たかもしれません。 これは、qt が共有システムフォントキャッシュに依存しているからです。 もし、他の誰も使っていないフォントを要求すると、 そのキャッシュの更新に時間がかかります。 これは、Windows や OSX ではよく起こるのですが、 それらのシステムでは他のソフトが異なるフォントの仕組みを 使用する傾向にあるため、関連するフォントキャッシュが空になるからです。 gnuplot の呼び出し時に、コマンドラインオプション -slow を つけてみてください。

8.3 pm3d によるデータファイルの splot で何も表示されません

set pm3d; splot 'a.dat' とやっても、 カラーボックスは表示されるもののグラフは表示されないとしたら、 もしかしたら 2 つのつながっている線 (孤立線) を分離する空行が ないのでは ? 空行を入れなさい ! これが何を意味するのかに興味があるなら、 gnuplot の demo ディレクトリにある demo/glass.datdemo/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" のように描画するか、のどちらかを行ってください。

8.4 なぜ gnuplot はとても小さい数字のデータを無視するのですか

gnuplot は、ある目的のため 1e-08 より小さい数を 0 として扱います。 よってとても小さい数の集まりを描画しようとすると それらは 0 として描画されてしまいます。 対数軸で描画する場合は、 もっとひどいことにそれらは目盛りからはずれてしまいます。 また、全ての数が "0" である場合、 範囲は空であるとみなされます:

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 を参照してください。

8.5 multiplot のグラフを replot すると一かけらしか出ません

gnuplot は、直近の plotsplot コマンドを 再生成するために十分な情報を保持するだけなので、multiplot に対しては、 それを生成する完全なコマンド列を スクリプトファイルに保存する必要があります。 そして、load することでその内容を gnuplot に取り込めば、 あなたが必要とする回数だけ異なる出力形式、異なる出力ファイルに対して 再描画をすることができます。

8.6 書いた式 (1/3 など) が意味のない結果を出力してしまいます

gnuplot は整数の式の場合、実数演算ではなく整数演算を行ないます。 例えば式 1/3 は 0 と評価されます。 もし実数の値が欲しいならば、その数の後にドット "." をつけてください。 例:

gnuplot> print 1/3
                0
gnuplot> print 1./3.
                0.333333

整数の式をこのようにして評価するやり方は C や Fortran でも行なわれています。

8.7 私の出力が不完全です

set outputunset output によって、 たまっている出力を吐き出させ、そして出力をクローズする必要が あるかも知れません。

出力形式によっては、一つの出力ファイルに複数のページが含まれています (postscript, pdf, latex, svg, ...)。 これらの出力モードでは、gnuplot はあなたが描画の追加ができるように 各描画後にファイルをオープンしたままにしています。 よって異なる出力形式を選択する (set term) か、 または gnuplot を終了するまでは、そのファイルは完全ではなく、 外部のアプリケーションでは使用できるようにはなっていません。

8.8 パイプやスクリプトから gnuplot を呼び出すと スクリーンにグラフがでません

よくある原因の一つが、gnuplot がグラフの描画直後に終了してしまうことで、 終了時に描画ウィンドウが閉じてしまうため、 あなたがグラフを見れないぐらいにすべての表示があっという間に 終わってしまう、という状態です。 これには、いくつかの解決法があります。

以下は、これらの修正のうち 2 つを示す Perl スクリプトです:

#!/usr/local/bin/perl -w
open (GP, "|/usr/local/bin/gnuplot -persist") or die "no gnuplot";
# 各出力後に強制的にバッファを掃き出す
use FileHandle;
GP->autoflush(1);
print GP,"set term x11; plot sin(x) with lines\n";
print GP,"pause mouse close\n";
close GP

9 帰属

この FAQ は、 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 Broeker およびその他の人々による修正が Alexander Mai と Juergen v.Hagen によりまとめ直されました。 gnuplot バージョン 4 用の修正は、 Petr Mikulík と Ethan Merritt により行なわれました。 gnuplot バージョン 5 用の修正は、 Ethan Merritt により行なわれました。

(訳注: 日本語訳は Shigeharu TAKENO ([email protected]) により 行なわれました。)

この文書について...

gnuplot FAQ

この文書はLaTeX2HTML 翻訳プログラム Version 2017.2 (Released Jan 23, 2017)

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.

日本語化したもの (2017.2 JA patch-2.1beta1.20 (Released Apr 23, 2019) 版)

Copyright © 1998, 1999, Kenshi Muto, Debian Project.
Copyright © 2001-2019, Shige TAKENO, Niigata Inst.Tech.

を用いて生成されました。

コマンド行は以下の通りでした。:
latex2html -split 0 -show_section_numbers -nobottom_navigation -init l2h-init faq-ja-20190507.tex.

翻訳は 2019-05-07 に実行されました。




竹野茂治@新潟工科大学
2019-05-07