この文書は、gnuplot バージョン 6 についての記述です。
FAQ バージョン: 2023 12 月
現文書の PDF 版: http://www.gnuplot.info/faq/faq.pdf (訳注: 英語版)。
このドキュメントの最新版は、Web 上の http://www.gnuplot.info/faq/ にあります。
コメント、提案等は開発者向けメーリングリスト [email protected] に送ってください。
gnuplot はコマンド駆動型の描画プログラムです。関数の描画、 およびデータ点の描画を、2 次元、3 次元の両方で、 そして多くの異なるスタイル、多くの異なる出力形式で行うことができます。 また、gnuplot は自動的にグラフを生成するスクリプト言語としても 使用することができます。 これは主に科学的なデータを画面表示するものとして設計されています。 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 は、なじみのある命令 if else continue break while for を 用いた文脈駆動型、データ駆動型の処理制御、 および繰り返しをサポートしています。
gnuplot は、MS Windows, linux, unix, macOS などの 多くのプラットホーム上で、広く利用できます。 現在のソースコードは、VMS, Ultrix, OS/2, MS-DOS などの古いシステムのサポートも保持していますが、 16 ビットプラットホームはもうサポートしていません。
gnuplot のソースは、それなりに標準的 (ANSI/ISO C, POSIX 等) な環境から 多少外れたものの上でもコンパイルできるでしょう。
gnuplot はボランティアの集団によって作られたものです。 彼らは gnuplot 、およびその使用の許可、 不許可に関する法的な文書を作成できません。また何の保証もありません。 自分自身の責任で使用してください。
gnuplot は、無償であると言う意味でフリーウェアです。 gnuplot をあなたが望むように使用し、改変することができますが、 改変したものを配布することについてはある種の制限がつきます。 Copyright というファイルの modification (改変) と redistribution (再配布) の項目を読んでそれに従ってください。 ソースファイルのうち、個別に、明らかに二重ライセンスのものが いくつかあります。その場合、その特定のファイルに含まれるコードの 再配布に関する代わりの条項は、そのファイルの先頭に挙げられています。
gnuplot は FSF が作ったのでも FSF がメンテナンスしているのでもありません。 一時期 FSF から配布されていたこともありますが、 しかし現在はこれは正しくありません。 gnuplot は、GNU General Public License (GPL) に全く保護されていません。
gnuplot Web ページ http://www.gnuplot.info を見てください。
英語以外の他の言語での文書や入門書もあります。 最新のリストについては、 http://gnuplot.sourceforge.net/help.html の "Localized learning pages about gnuplot" の節をご覧ください。
gnuplot の最新の安定版は、2023 年 12 月に最初にリリースされた 6.0 です。 更新バージョン (パッチレベル 1, 2, ...) は、だいたい 6 ヶ月毎に リリースされます。 現在の開発版は gnuplot 6.1 です。
初めに最も適切な場所は http://www.gnuplot.info です。 ここから、例えば SourceForge 上の開発プロジェクトサイト http://sourceforge.net/projects/gnuplot などの、 色々なサイトの場所を見つけられるでしょう。
ソース配布物 ("gnuplot-6.0.0.tar.gz" または同様の名前) は公式の配布サイト http://sourceforge.net/projects/gnuplot にあります。
一般的に、現在の開発版は、最終安定リリース版の gnuplot には まだ入っていない機能も入っています。
gnuplot の開発版は、git リポジトリに保持されていて、以下に示すように クローンを手元で作成し、ソースを調べたり、 実行プログラムをソースから作成したりできます。
git clone https://git.code.sf.net/p/gnuplot/gnuplot-main gnuplot
開発版に対する質問は必ず [email protected] に送ってください。
リリースノートと README, INSTALL のファイルを 読んでください。C と C++ コンパイラが必要で、様々なサポートライブラリが あらかじめインストールされている必要もありますが、 それはどのような設定オプションを選択するかによりますし、 作成する実行ファイルにどの出力形式をサポートさせたいかにもよります。
ソース配布物に完全なドキュメントが PDF ファイル形式で含まれています。 個々のセクションは、gnuplot の作業中に help キーワード を 打つことで見ることができます。 ドキュメントの他の形式も、docs サブディレクトリ内で ソースからコンパイルできます。
http://gnuplot.sourceforge.net/documentation.html に、 英語版と日本語版のコピーが置いてあります。
ソース配布物には動作するサンプルのディレクトリが含まれています。 これらのサンプルの多く、およびその結果の描画グラフは http://gnuplot.sourceforge.net/demo/ でも見ることができます。
コンパイル済みの gnuplot が与えられている場合、show コマンドで、 それがコンパイルされたときに使用されたコンフィグレーションと ビルドオプションの一覧を表示できます。 あなたの gnuplot に組み込まれている出力形式 ("terminal" とも言います) は、 set terminal で表示できます。
gnuplot> show version long gnuplot> set terminal
最初のプロンプトで help コマンドを実行してください。 その後キーワードをたどっていってください。 help plot や help set から始めるのがいいでしょう。
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>
出発点が、デフォルト対話型出力形式でない場合は、 同じことを push と pop で達成できます。
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; によって得られるファイルとは 違うものになります。 一般に、この方法で保存したグラフは、コマンドラインから出力形式を変更して 作成したものよりも、よりスクリーン画像に近いものを生成するでしょう。
基本的に、グラフをそのワープロソフトが理解できる形式のファイルに保存すれば、 そのワープロソフトで読み込むことができるでしょう。 後で正しいサイズに変換もできるという点で、ベクトル形式のフォーマット (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 を使って TEX や LATEX 文書に取り込むためのグラフを作る方法は 何通りもあります。 取り込む *.tex ファイルの断片を直接生成する出力形式もありますし、 \includegraphics コマンドを使って取り込むための *.eps, *.pdf, *.png 出力を生成するものもあります。 epslatex と cairolatex 出力形式は、画像ファイル (*.eps か *.pdf) と それを参照する *.tex 文書ファイルの両方を生成します。 tikz 出力形式は、テキストとグラフを生成し、 その出力を pdflatex で処理すれば PDF ファイルが作成できます。
大抵のワープロソフトはビットマップ画像 (png, pbm 等) を取り込むことができますが、 この方法の短所は、 そのグラフが gnuplot によって生成されたときのサイズによって その解像度が制限されてしまうことです。 一般に、文書が最終的にプリントアウトされる解像度よりも その解像度はかなり低くなります。
これはあなたが使う出力形式に依存します。
それには save "filename" と load "filename" のコマンドを 使ってください。
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
あなたの使用する OS が popen() 関数をサポートしているなら、 他のプログラムやシステムユーティリティを plot コマンドの 一部分として使用して入力データをフィルタリングすることができます。
gnuplot> plot "< sort +2 file.in" # 2 列目のデータで事前にソート
この仕組みは、Unix 由来のコマンドラインツール awk, sort, grep などと組み合わせて使用するととても強力です。
パイプをサポートしているシステムでは、 他のプログラムからパイプ経由で gnuplot にコマンドを渡すことができます。 Octave (http://www.octave.org) のように、 gnuplot をグラフィックエンジンとして使用している多くのアプリケーションが この方法を使用しています。 これは、form ベースの Web ページから gnuplot を起動する cgi スクリプトでも 利用できます。
複数の要素に対する plot や splot コマンドを実行した場合、 gnuplot は、デフォルトでは色と線種の集合を巡回的に使用します。 これは、その plot コマンド に特定の色や線種属性を指定することで 変更できますし、デフォルトの列を変更することもできます。 以下のコマンドは、それぞれ追加パラメータをたくさん指定できます。
2 つの関連するコマンドがあります。 set hidden3d は、3 次元描画スタイル splot ... with lines で 描画する曲面に影響を与えます。 それは、他の 3 次元描画スタイルで生成され、それらの曲面で隠される線分を クリッピングします。 しかし、pm3d モードで生成されるグラフは処理しません。 with pm3d, with zerror, with boxes の スタイル、および set pm3d が有効な最中に描かれた 様々な描画要素についても同様です。 これらのグラフに対する隠面処理は、 見る側からの距離の順番で それらを描画することによって代用的に達成されていますが、 その順番は、コマンド set pm3d depthorder で制御できます。
上、下、左、右の境界位置を、ページ内の位置として比率で指定してください:
set lmargin at screen 0.05 set bmargin at screen 0.05 set rmargin at screen 0.95 set tmargin at screen 0.95
あなたが必要とするコマンドは set multiplot です。 gnuplot は指定した数のグラフを規則的な升目状に配置します (set mulplot layout <rows>, <columns> ...)。 または、それらを set origin と set size を使って ひとつずつ位置を決めることもできます。
set size square か set view equal xy としてみてください。 バージョン 6 では、set isotropic というコマンドもあります。
set palette cubehelix を試してください。
以下のようにデータ値として ? を指定すればできます。
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 としてみてください。
状況によりますが、主な方法は以下の通りです:
gnuplot は、Y 軸ラベルを水平に出力する場合 (set ylabel norotate)、 それを書くのに、グラフの左にどれくらいのスペースが必要かを 評価する方法に問題を抱えていました。 これは、そのラベル文字列が TeX のマークアップを含んでいる場合は 特にそうでした。この問題の回避策として、ylabel ではなく、 番号付きラベルで文字列を置くことができます。
Y = 1001 set label Y '$\operatorname{\mathfrak{Im}} S_{21}$' set label Y norotate at graph 0.0, 0.5 offset -6
gnuplot バージョン 5.4 までは、直接アニメーションファイルを出力できる 出力形式は一つだけ (gif) でした:
set terminal gif animate {delay <time>} {loop <N>} {optimize}
バージョン 6 では、webp フォーマットでのアニメーションも サポートしています。 デモの中の http://gnuplot.sourceforge.net/demo/animate2.html も参照してください。
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 を描き、 その等高線のデータを一時ファイルやデータブロックにセーブすることにあります。
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 の後ろに above か below の キーワードを追加してください。
コマンド set view map は、視角とスケールを調整し、 それに続く splot による 3 次元グラフを、 plot による 2 次元グラフとほぼ同じレイアウトで、x 軸を水平に、 y 軸を鉛直方向に表示してくれます。 バージョン 5.4 のコマンド set view projection xz や set view projection yz は、同様に xz や yz 平面の 2 次元射影用のレイアウトを初期化し、z 軸を水平にし、 x 軸や y 軸を鉛直方向に表示します。
pm3d スタイルの explicit オプションを使ってください:
gnuplot> set pm3d explicit gnuplot> splot x with pm3d, x*y with points
個々の等高線にラベルをつけたグラフは、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
gnuplot は、あらかじめ表形式にされたデータを表示するための、 さまざまな横並び型 (clustered) と積み上げ型 (stacked) の ヒストグラムスタイルをサポートしています。 また、生のデータを場所毎に累積するためのいくつかのオプションも提供していて、 それを切り替えて棒グラフとして表示させることも可能です。 マニュアルの bins と smooth frequency の部分を 参照してください。
円グラフは古い gnuplot ではちょっと面倒でした。以下を見てください。 http://gnuplot.sourceforge.net/demo/circles.html または、以下を参照してください。 http://gnuplot-tricks.blogspot.com/2009/08/pie-charts-entirely-in-gnuplot.html バージョン 6 では、新しい描画スタイル with sectors を導入 し、もっと簡単に円グラフが描けるようになっています。
デモの中には単純なガントチャートの例があります。
はい。2 次元グラフでは別々に x 軸を下 (x1) と上 (x2) に 持つことができますし、別々に y 軸を左 (y1) と右 (y2) に持つことができます。 バージョン 5 では、with parallelaxes という描画モードで y 軸をさらにいくつでも追加することもできます。
描画スタイル with polygons は、2 次元描画でも、 3 次元描画でも多角形形状 (三角形、四辺形、八角形、...) を処理できます。 これはバージョン 5.4 で導入されました。
古いバージョンで、それを行う最も良い方法は、 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 つが同一である ことにも注意してください。 これは、pm3d のコードが、四辺形を処理する方法しか知らないからです。 <cN> はオプションの色指定です。
これを以下のようにして描画します:
set pm3d set style data pm3d set pm3d depthorder splot 'facets.dat' using 1:2:3 title "default coloring" splot 'facets_with_color.dat' using 1:2:3:4 title "explicit colors"
gnuplot は 3 次元モデリングソフトではありませんので、 本当の 3 次元描画のためには、 多分レイトレーシングソフトを使う方がいいでしょう。
描画する各関数の直前に描かせたい範囲を置いてください。 例えば、実験データと、領域の別の部分をカバーする 2 つの異なる関数モデル f1, f2 を描画するには:
gnuplot> set autoscale x # x の範囲をデータから取得 gnuplot> plot 'data', [*:0] f1(x), [0:*] f2(x)
splot への入力データが、各行が同じデータ点数 (通常は空行で分離されている) を持つように揃っていれば、splot はデフォルトではそのデータを 曲面を記述するものとして扱います。 そうでなく個々の曲線を描画したければ、 unset surface, set surface explicit, plot ... nosurface などを組み合わせてみてください。
以下は一つの方法です:
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)
バージョン 5 以降、gnuplot はデフォルトで拡張文字列モード (enhanced text) で、それは特殊文字を文字列内に埋めこむことによって 文字列のマークアップを示します。
拡張文字処理制御記号 | |||
制御記号 | 例 | 結果 | 説明 |
^ |
a^x |
上付き文字 | |
_ |
a_x |
下付き文字 | |
@ |
a@^b_{cd} |
空ボックス (幅がない) | |
& |
d&{space}b |
d b |
指定した長さのスペースを挿入 |
~ |
~a{.8-} |
'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 |
この処理モードから、特定のテキスト文字列を除外するには、 キーワード noenhanced を使用してください。 例えば、ファイル名を下付き文字と解釈させないためには:
set title 'Compare file_1.dat and file_2.dat' noenhanced
ええ。
不運にも、特に PostScript 出力の生成時など、 使用するにはかなり厄介な環境がいくつかあります。 UTF-8 のコンピュータ環境で作業をしている場合、 gnuplot でそれを使用する場合には、多分何か特別なことを する必要はないでしょう。 しかしそうでない場合は、出力のためには gnuplot に UTF-8 を 使用することを以下のように伝える必要があります: set encoding utf8
UTF-8 文字列をあなたのキーボードで入力できない場合は、
gnuplot の外でそれを解決する必要があるでしょう。
またはその 8 進のエスケープ文字列を 1 バイト毎入力するか、
(バージョン 5.4 以降は) \U+221E
() のような
Unicode のエスケープシーケンスを使うことができます。
あなたのキーボードで UTF-8 を生成できるが
どのキーストロークで特定の文字列を生成できるかを知らない場合は、
多分適当な文字選択アプリケーションがあなたのデスクトップに
ついているでしょう (例えば KDE なら kcharselect、
GNOME なら Character Map)。
最も自然な方法は、UTF-8 フォントを使い、文字
(Unicode \U+210F
) を直接入力することです。
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 です。
ただし、水平の横棒はイタリック体としてしか存在しないことに注意してください。
Planck 定数と同様、最も自然な方法は UTF-8 フォントを使い、文字 (Unicode コードポイント #x2299 ; "circled dot operator") を直接入力することです。
非常によく似たグリフがコードポイント #x2609 にもあります。
これは "sun" で、よりいいかもしれませんが、
それを提供するフォントは多くはありません。
Planck 定数と同様、最も自然な方法は UTF-8 フォントを使い、文字 (Unicode \U+2299
; "circled dot operator") を直接入力することです。
非常によく似たグリフ (Unicode コードポイント \U+2609
; "sun") は
よりいいかもしれませんが、
それを提供するフォントは多くはありません。
古いやり方として、特別なフォント、例えば Adobe の "Symbol" フォントに 切り替えるために拡張文字処理モード (enhanced text モード) を使用する 方法があります。それは、あなたが出力したい文字に通常の ASCII 文字を 割り当てています。これは、現在でも PostScript 出力には必要でしょう。 しかし、より簡単な方法は、UTF-8 エンコーディングを選択し、 特殊文字を他の文字列と同様にそのまま入力することです。 この方法では、フォントの変更は必要なく、また CJK 文字集合を含む すべての Unicode コードポイントへのアクセスが可能になります。 しかし gnuplot によって作られたファイルを実際に印刷、表示するには、 あなたのコンピュータ、あるいは出力デバイスに適切なフォントが インストールされている必要があります。 gnuplot 自身にはフォントは含まれていません。
いくつかの LATEX 系出力形式 (latex, epslatex, tikz,
context, cairolatex) は、生成した文字列を LATEX に渡します。
この場合は、$\alpha_{3}$
() のような、
通常の LATEX 風の記述が利用できます。
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 を使うべきで、 そこではそれらは普通の文字になります。
たいていの出力形式では、デフォルトフォントの名前とサイズを指定できます。 「拡張文字処理」モード ("enhanced text") では、フォント、 および文字サイズやボールド、イタリックの書体を一つのグラフ内で 変更できます。
インストール済の gnuplot が使用できるグラフィックドライバの一覧を見るには、 set term とタイプしてください。
ソース配布物には含まれていても、 デフォルトでは使えないようになっているグラフィックドライバもあります。 それらが使いたければ、ソースからコンパイルし直す必要があります。
最初に、それが本当にバグなのか、それとも ある set コマンドで翻すことができる特徴なのかを見極めてください。
次に、あなたが使っている gnuplot が古い版でないか確認してください。 もしそうなら、新しい版でそのバグは取り除かれている可能性があります。
レポートを送る前に、質問のバグが、現在のバージョンのリリース後以降の より新しいソースで既に修正されていないかチェックしてみてください。 それらは、バグ tracker では "pending-fixed" とマークされています。
これらをチェックした後でなおそれがバグであると確信したなら、 http://sourceforge.net/p/gnuplot/bugs の bug-tracker で 報告してください。 その際、gnuplot のバージョン (パッチレベルも含む) とそれが動いている オペレーティングシステムも書いてください。 特にそのエラーを再現する簡単なスクリプトを提供してもらえると 大いに助かります。
souceforge の tracker は、バグのレポート、および 後のリリースに反映するためのバグの修正の収集のためのものです。 gnuplot に関する問題に対する回避策を見つける、 あるいはそれを実際に解決するには、 インターネット上に色々存在するフォーラムの方がよい場所でしょう。
gnuplot それ自身は、しんどい数値計算にはあまり向いていません。 しかし、かなり大きなデータ集合 (100 万データ点程度) は簡単に処理できます。 簡単ではない関数の評価のための gnuplot の速度が制限を与えてしまうような 特定のアプリケーションを使用したい場合は、 その関数を C か C++ でコーディングして作り、 それをプラグインとして gnuplot で呼び出す、という方法もあります。
さらなる数値計算を必要とする場合は、以下のソフトを調べてみてください:
octave (http://www.octave.org) は、 高水準言語で、主に数値計算用です。 Octave は GPL ライセンスに従い、原則的にフリーな Matlab クローンです。 線形や非線形の問題を数値的に解くのに便利な コマンドラインインターフェースを備えています。 なお、octave は gnuplot を描画エンジンとして使いますので、 gnuplot の上位のデータ処理ソフトを手に入れることにもなります。
scilab (http://www.scilab.org) は、 別の、matlab に代わるオープンソースソフトです。
julia + Gaston (http://github.com/mbaz/Gaston.jl) Julia は、数値解析と計算機科学用に設計された言語です。 Gaston は、グラフ出力用に gnuplot とのやりとりを提供する julia パッケージです。
gnuplot バージョン 6 では、複素特殊関数のとても広いセットを提供しています。 もしあなたが必要とするものが含まれていなければ、 他のプログラムを使うか、gnuplot 用にカスタムプラグインを書くか、 のいずれかが必要でしょう。
ほとんどの対話型出力形式では、再描画、各要素の描画のトグル、 軸のスケールの変更などを行うために、あらかじめ設定されたホットキー、 およびユーザ定義可能なホットキーの両方をサポートしています。 現在有効な gnuplot の描画ウインドウ上で h を打つと、 ホットキーの一覧が表示されます。 さらなる情報については、help mouse と help bind を 参照してください。
gnuplot のベータテストメーリングリストに入ってください。
メール本文 (メールタイトルではなく) に subscribe gnuplot-beta
と書いてメールを [email protected]
に送ってください。
gnuplot は、それ自身ではフォント処理を行いませんので、 それは必然的に個々のデバイスをサポートするライブラリに任せることになります。 残念ながらこれは、フォントの検出においては、異なる出力形式には 異なる説明が必要だということを意味しますので、 ここでは、簡単なヒントをいくつか上げておきます。 詳しい情報については、あなたが問題にしている出力形式用の gnuplot のドキュメントを参照してください。
setenv GNUPLOT_DEFAULT_GDFONT verdana
set term x11 font "mbfont:sazanami mincho,vera,20"
"slow font initialization" というエラーメッセージも出たかもしれません。 これは、qt が共有システムフォントキャッシュに依存しているからです。 もし、他の誰も使っていないフォントを要求すると、 そのキャッシュの更新に時間がかかります。 これは、Windows や macOS ではよく起こるのですが、 それらのシステムでは他のソフトが異なるフォントの仕組みを 使用する傾向にあるため、関連するフォントキャッシュが空になるからです。 gnuplot の呼び出し時に、コマンドラインオプション –slow を つけてみてください。
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"
のように描画するか、のどちらかを行ってください。
gnuplot は、ある目的のため 1.e-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 を参照してください。
バージョン 5.4 の gnuplot は、直近の plot や splot コ マンドを再生成するために十分な情報を保持するだけだったので、 multiplot 全体を完全に再現するには、それを生成する完全なコマンド列を スクリプトファイルに保存する必要がありました。 そして、load することでその内容を gnuplot に取り込めば、 あなたが必要とする回数だけ異なる出力形式、異なる出力ファイルに対して 再描画をすることができました。
同じ制限が、対話型出力形式で multiplot を resize した場合にも起こって いました。それは、resize イベントは通常 replot を実行しているからです。 qt と wxt 出力形式は、ツールボックスウィジェット内に、 resize 時に replot することを抑制するトグルスイッチを提供しています。 x11 出力形式は、option set term x11 noreplotonresize を 提供しています。
gnuplot バージョン 6 では、multiplot でのすべての要素の再生成を
自動化しました。コマンド set multiplot があった場合、
gnuplot はコマンド群を $PVAL_LAST_MULTIPLOT
という名前付きデータブロックに保存します。
終了するコマンド unset multiplot を発行すると、
このデータブロックを、multiplot を作成する plot 命令群を再描画するもの
に置き換えます。コマンド remultiplot を使用したときには、
それを明示的に行いますし、または直前の plot コマンドが multiplot の一部で
あるときに replot コマンドかリサイズイベントを呼び出したときには、
暗黙にそれを行います。
その間に、gnuplot の状態 (軸の範囲、線種、フォント等) を変更した場合、
元のコマンド群を再実行するとわずかに異なる結果になる可能性がある、
という特徴は欠点かもしれません。
gnuplot は整数の式の場合、実数演算ではなく整数演算を行ないます。 例えば式 1/3 は 0 と評価されます。 もし実数の値が欲しいならば、その数の後にドット "." をつけてください。 例:
gnuplot> print 1/3 0 gnuplot> print 1./3. 0.333333
整数の式をこのようにして評価するやり方は C や Fortran でも行なわれています。
set output か unset output によって、 たまっている出力を吐き出させ、そして出力をクローズする必要が あるかも知れません。
出力形式によっては、一つの出力ファイルに複数のページが含まれています (postscript, pdf, latex, ...)。 これらの出力モードでは、gnuplot はあなたが描画の追加ができるように 各描画後にファイルをオープンしたままにしています。 よって set か unset output コマンドを使用するか、 異なる出力形式を選択する (set term) か、 または 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
この 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 および 6 用の修正は、 Ethan Merritt により行なわれました。
(訳注: 日本語訳は Shigeharu TAKENO ([email protected]) により 行なわれました。)
この文書はLaTeX2HTML 翻訳プログラム Version 2023.2 (Released July 1, 2023)
を日本語化したもの (2023.2 JA patch-3.2beta1.38 (Released 2023-09-05) 版)
を用いて生成されました。
コマンド行は以下の通りでした。:
latex2html -split 0 -show_section_numbers -nobottom_navigation -entities -init l2h-init faq-ja-20240902.tex
翻訳は 2024-09-04 に実行されました。