\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gnuplot.info @settitle Gnuplot: An Interactive Plotting Program @setchapternewpage odd @documentencoding UTF-8 @c %**end of header @c define the command and options indices @defindex cm @defindex op @defindex tm @dircategory Math @direntry * GNUPLOT: (gnuplot). An Interactive Plotting Program @end direntry @ifnottex @node Top, Gnuplot, (dir), (dir) @top Master Menu @end ifnottex @example GNUPLOT An Interactive Plotting Program Thomas Williams & Colin Kelley Version 5.0 organized by Ethan A Merritt with help from many others Copyright (C) 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley Copyright (C) 2004 - 2012 various authors Mailing list for comments: gnuplot-info@@lists.sourceforge.net Mailing list for bug reports: gnuplot-bugs@@lists.sourceforge.net This manual was originally prepared by Dick Crawford Version 5.0 - March 2014 Major contributors (alphabetic order): @end example @menu * Gnuplot:: * 描画スタイル_(Plotting_styles):: * コマンド_(Commands):: * 出力形式_(Terminal):: * Concept_Index:: * Command_Index:: * Options_Index:: * Function_Index:: * Terminal_Index:: @end menu @node Gnuplot, 描画スタイル_(Plotting_styles), Top, Top @chapter Gnuplot @cindex gnuplot @c ^

An Interactive Plotting Program

@c ^

Thomas Williams & Colin Kelley

@c ^

Version 6 organized by Ethan A Merritt

@c ^

Major contributors (alphabetic order):
@c ^
@c ^ Hans-Bernhard Broeker, John Campbell,
@c ^ Robert Cunningham, David Denholm,
@c ^ Gershon Elber, Roger Fearick,
@c ^ Carsten Grammes, Lucas Hart, Lars Hecking,
@c ^ Péter Juhász, Thomas Koenig, David Kotz,
@c ^ Ed Kubaitis, Russell Lang, Timothée Lecomte,
@c ^ Alexander Lehmann, Alexander Mai, Bastian Märkisch,
@c ^ Tatsuro Matsuoka, Ethan A Merritt, Petr Mikulík,
@c ^ Hiroki Motoyoshi, Carsten Steger, Shigeharu Takeno,
@c ^ Tom Tkacik, Jos Van der Woude,
@c ^ James R. Van Zandt, Alex Woo, Johannes Zellner
@c ^

@c ^

Copyright (C) 1986 - 1993, 1998 - 2004 Thomas Williams, Colin Kelley
@c ^ Copyright (C) 2004 - 2024 various authors

@c ^

Mailing list for comments: gnuplot-info@@lists.sourceforge.net
@c ^ Gnuplot home page
@c ^ Issue trackers:   @uref{https://sourceforge.net/p/gnuplot/bugs,bugs }    @uref{https://sourceforge.net/p/gnuplot/feature-requests,feature requests } @c ^

This manual was originally prepared by Dick Crawford

@c ^ @menu * 著作権_(Copyright):: * はじめに_(Introduction):: * 探し出す手助け/バグ_(Seeking-assistance_/_Bugs):: * バージョン_6_での新しい機能_(New_features_in_version_6):: * バージョン_5_と_6_との違い_(2_Differences_between_versions_5_and_6):: * 開発ブランチ_(Development_branch_(version_6.1)):: * デモ、ネット上のサンプル_(Demos_and_Online_Examples):: * バッチ/対話型操作_(Batch/Interactive):: * キャンバスサイズ_(Canvas_size):: * コマンドライン編集_(Command-line-editing):: * コメント_(Comments):: * 座標系_(Coordinates):: * 文字列データ_(Datastrings):: * 拡張文字列処理モード_(Enhanced_text_mode):: * 環境変数_(Environment):: * 式_(Expressions):: * フォント:: * ヘルプの用語解説_(Glossary):: * インラインデータとデータブロック_(inline_data_and_datablocks):: * 繰り返し_(iteration):: * 線種、色、スタイル_(linetypes):: * レイヤー_(layers):: * マウス入力_(mouse_input):: * 残留_(Persist):: * 描画_(Plotting):: * プラグイン_(Plugins):: * Scope_of_variables:: * 初期化_(Startup_(initialization)):: * 文字列定数、文字列変数、文字列関数_(Strings):: * 置換とコマンドラインマクロ_(Substitution):: * 区切りやカッコの使い方_(Syntax):: * 時間/日付データ_(Time/Date):: * ウォッチポイント_(Watchpoints)_:: @end menu @node 著作権_(Copyright), はじめに_(Introduction), Gnuplot, Gnuplot @section 著作権 (Copyright) @cindex copyright @cindex license @example Copyright (C) 1986 - 1993, 1998, 2004, 2007 Thomas Williams, Colin Kelley Copyright (C) 2004-2024 various authors @end example Permission to use, copy, and distribute this software and its documentation for any purpose with or without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Permission to modify the software is granted, but not the right to distribute the complete modified source code. Modifications are to be distributed as patches to the released version. Permission to distribute binaries produced by compiling modified sources is granted, provided you @example 1. distribute the corresponding source modifications from the released version in the form of a patch file along with the binaries, 2. add special version identification to distinguish your version in addition to the base release version number, 3. provide your name and address as the primary contact for the support of your modified version, and 4. retain our contact information in regard to use of the base software. @end example Permission to distribute the released version of the source code along with corresponding source modifications in the form of a patch file is granted with same provisions 2 through 4 for binary distributions. This software is provided "as is" without express or implied warranty to the extent permitted by applicable law. @example AUTHORS Original Software: Thomas Williams, Colin Kelley. Gnuplot 2.0 additions: Russell Lang, Dave Kotz, John Campbell. Gnuplot 3.0 additions: Gershon Elber and many others. Gnuplot 4.0 and subsequent releases: See list of contributors at head of this document. @end example (以下おおまかな訳; 訳は正しくないかも知れませんので詳しくは上記の原文 を当たってください。訳者は責任を持ちません。) @example Copyright (C) 1986 - 1993, 1998, 2004, 2007 Thomas Williams, Colin Kelley Copyright (C) 2004-2024 多くの著者 @end example このソフトウェアとその付属文書の使用、複製、配布の許可は、上記の著作権 (copyright) 表示が、全ての複製物に書かれていること、および著作権表示と この許諾文の両方がその支援文書に書かれていることを条件とした上で、この 文書により保証されます。 このソフトウェアの修正も認められています。しかし、修正を含む全ソースコ ードの配布の権利は認められません。修正はリリース版に対するパッチの形で 配布しなければなりません。修正されたソースをコンパイルして作られたバイ ナリの配布は、以下の条件の元で認められます: @example 1. リリース版からのソースの修正部分を、パッチの形でバイナリと共に配 布すること 2. ベースとなるリリース版と区別するために、そのバージョン番号に特別 なバージョン指定子を付加すること 3. その修正版のサポート用に、あなたの名前とアクセス可能なアドレスと を提供すること 4. ベースとなるソフトウェアの使用に関しては、我々の連絡情報を保持し 続けること @end example リリース版のソースコードを、パッチの形でのソースの修正と一緒に配布する ことは、バイナリ配布に関する条項 2 から 4 までの条件の元で許されます。 このソフトウェアは "あるがまま" 提供され、適用可能な法律で許められる範 囲の保証を表明あるいは暗示していはいません。 @example 著者 オリジナルソフトウェア: Thomas Williams, Colin Kelley. Gnuplot 2.0 追加: Russell Lang, Dave Kotz, John Campbell. Gnuplot 3.0 追加: Gershon Elber とその他の人々。 Gnuplot 4.0 およびそれ以降のリリース: この文書の先頭の寄与者 (contributors) の一覧参照。 @end example @node はじめに_(Introduction), 探し出す手助け/バグ_(Seeking-assistance_/_Bugs), 著作権_(Copyright), Gnuplot @section はじめに (Introduction) @cindex introduction @c ? `gnuplot` は、ポータブルなコマンド入力方式のグラフユーティリティで、 Linux, OS/2, MS Windows, macOS, その他多くのプラットホーム上で動作しま す。ソースコードには著作権がありますが、無料で配布されています (すなわ ち、それに対価を支払う必要はありません)。元は、科学者や学生が数学関数 やデータなどを対話的に表示できるよう作られたのですが、現在までに例えば Web スクリプトなど、多くの非対話型の利用もサポートするように成長してい ます。これは、例えば Octave のようにサードパーティのアプリケーションの 描画エンジンとしても使われています。gnuplot は、1986 よりサポートと活 発な開発が行われています。 gnuplot は、2 次元、または 3 次元の多くの種類のグラフを生成できます。 います: 折線グラフ、点グラフ、棒グラフ、等高線、ベクトル場描画、画像の 取り込み、曲面、そしてそれらに関連するさまざまな文字列等。そしてさらに いくつかの特別なグラフ、例えば温度分布図 (heatmap)、蜘蛛の巣グラフ (レ ーダーチャート, spiderplot)、極射影 (polar projection)、ヒストグラム (histograms)、箱ひげ図 (boxplot)、ビースウォームグラフ (bee swarm)、 非線形軸などもサポートしています。 gnuplot は多くの異なる出力をサポートしています: 対話型スクリーン出力形 式 (マウスやホットキー入力も可能)、ペンプロッタや現在のプリンタへの直 接出力、または多くのファイル形式への出力 (eps, emf, fig, jpeg, LaTeX, pdf, png, postscript, ...)。gnuplot は、容易に新しい出力形式を追加する よう拡張することができます。最近では例えば webp アニメーションがサポー トされました。svg や HTML5 canvas 出力形式を利用すれば、グラフを Web ページ内にマウス利用可能な形で埋め込んだ出力を生成することもできます。 `gnuplot` のコマンド言語は大文字小文字を区別します。すなわち、小文字で 書かれたコマンドや関数名は、それらを大文字で書いたものとは同じではあり ません。いずれのコマンドも、あいまいさの無い限りにおいて省略することが できます。1 行中にはセミコロン (;) で区切って複数のコマンドを書くこと ができます。文字列は単一引用符、あるいは二重引用符のどちらかで書き始め ますが、両者には微妙な違いがあります (詳細は、以下参照: `syntax`)。例: @example set title "My First Plot"; plot 'data'; print "all done!" @end example コマンドは、複数行にまたがることができます。その場合は、最終行以外の 全ての行の行末にバックスラッシュ (\) を書く必要があります。バックスラ ッシュは必ず各行 *最後* の文字でなくてはなりません。その結果としてバッ クスラッシュと、それに続く改行文字が存在しなかったかのように扱われます。 つまり、改行文字がスペースの役をすることもありませんし、改行によってコ メントが終了することもありません。ですから複数行にまたがる行の先頭をコ メントアウトすると、そのコマンド全体がコメントアウトされることになりま す (以下参照: `comments`)。なお注意しますが、もし、複数行のコマンドの どこかでエラーが起きたとき、パーサはその場所を正確には指示することがで きませんし、また、正しい行に指示する必要もないでしょう。 このドキュメントにおいて、中括弧 (@{@}) は省略可能な引数を表すものとし、 縦棒 (|) は、互いに排他的な引数を区切るものとします。`gnuplot` のキー ワードや @ref{help} における項目名は、逆引用符 (`)、または可能な場合には `boldface` (太字) で表します。角括弧 (<>) は、それに対応するものに置き 換えられるべきものを表します。多くの場合、オプションの引数には、それが 省略されるとデフォルトの値が使用されます。しかし、これらの場合、必ずし も角括弧が中括弧で囲まれて書かれているわけではありません。 ある項目についてのヘルプが必要なときには、@ref{help} に続けてその項目名を 入力して下さい。または単に `help ?` でもヘルプの項目のメニューが現われ ます。 大量のグラフサンプルが、以下の Web ページにあります。 @uref{http://www.gnuplot.info/demo/,http://www.gnuplot.info/demo/ } コマンドラインから起動するときは、以下の書式が使えます。 @example gnuplot @{OPTIONS@} file1 file2 ... @end example ここで file1, file2 等は、@ref{local} コマンドで取り込むのと同等の入力ファ イル (スクリプトファイル) です。 gnuplot に与えるオプションは、コマンド行のどこに置いても構いません。フ ァイルは指定した順に実行され、同様に -e オプションで任意のコマンドを与 えることもできます。例: @example gnuplot file1.in -e "reset" file2.in @end example 特別なファイル名 "-" は、標準入力から読ませるのに使います。`gnuplot` は最後のファイルを処理し終わると終了します。読み込ませるファイルを一つ も指定しない場合は、`gnuplot` は標準入力からの対話入力を取ります。詳細 は、以下参照: `batch/interactive`。 コマンドラインオプションの詳細は以下参照: `command-line-options`。また は以下を実行してください。 @example gnuplot --help @end example 対話型描画ウィンドウでの作業中は、'h' を打つとホットキー (`hotkeys`) とマウス機能 (`mousing`) に関するヘルプを見ることができます。 @node 探し出す手助け/バグ_(Seeking-assistance_/_Bugs), バージョン_6_での新しい機能_(New_features_in_version_6), はじめに_(Introduction), Gnuplot @section 探し出す手助け/バグ (Seeking-assistance / Bugs) @cindex help-desk @cindex faq @cindex FAQ @cindex bugs @cindex seeking-assistance 公式の gnuplot ホームページは以下にあります。 @uref{http://www.gnuplot.info,http://www.gnuplot.info } 助けを求める前に、ファイル FAQ.pdf か、または上の Web サイトの @uref{http://www.gnuplot.info/faq/,FAQ (度々聞かれる質問; Frequently Asked Questions) の一覧 } をチェックしてください。 他に、(バグ以外の) 特定のグラフ描画の問題に関する助言は以下でも得られ ます。 @example https://stackoverflow.com/questions/tagged/gnuplot @end example バグの報告と、機能のリクエストは、以下のトラッキングシステムにあげてく ださい。 @example https://sourceforge.net/p/gnuplot/_list/tickets @end example ただし、あなたが報告しようとしているバグが、より新しい版で既に修正され ていないか、以前の報告をチェックしてください。 バグの報告や質問を投稿するときは、あなたが使用している gnuplot のバー ジョン、出力形式 (terminal)、オペレーティングシステム、といった情報を すべて入れてください。問題を再現する自己完結型の短いスクリプトを提示す るとなお良いでしょう。 gnuplot メーリングリストへの投稿の方法に関しては、gnuplot の開発 Web サイト @uref{http://sourceforge.net/projects/gnuplot,http://sourceforge.net/projects/gnuplot } を参照してください。 gnuplot メーリングリストにメールを書く前に、最初にそのメーリングリスト に参加する必要があることに注意してください。これは、スパムの量を減らす ために必要です。 メーリングリストメンバーへのメールアドレス: @example gnuplot-info@@lists.sourceforge.net @end example 開発版に関するメーリングリスト: @example gnuplot-beta@@lists.sourceforge.net @end example @node バージョン_6_での新しい機能_(New_features_in_version_6), バージョン_5_と_6_との違い_(2_Differences_between_versions_5_and_6), 探し出す手助け/バグ_(Seeking-assistance_/_Bugs), Gnuplot @section バージョン 6 での新しい機能 (New features in version 6) @c ?new version_6 @cindex new @cindex version @opindex version バージョン 6 は、遡ること 1986 年からの gnuplot 開発での最新メジャーリ リースです。それは、メジャーバージョン 5 (2015)、そしてその後のマイナ ーリリース 5.2 (2017), 5.4 (2020) に続くものです。開発は、SouceForge 上の git リポジトリプロジェクト内の、正式版とは別なブランチで続けられ ています。 このドキュメントに記述されている機能の中には、gnuplot をソースからコン パイルする際にそれを選択して設定している場合だけ使えるものがあります。 あなたが実行している特定の gnuplot が、コンパイル時にどのようなオプシ ョンを設定して作られたかを知るには、`show version long` とタイプしてく ださい。 @menu * 関数ブロックと局所変数_(Function_blocks_and_scoped_variables):: * 特殊関数と複素数値関数_(Special_and_complex-valued_functions):: * 新しい描画スタイル_(New_plot_styles):: * 凸包とマスクと平滑化_(Hulls:: * 名前付きパレット_(Named_palettes):: * 新しいデータ形式_(New_data_formats):: * 新しい組み込み関数と配列操作_(New_built-in_functions_and_array_operations):: * プログラムの流れの制御_(Program_control_flow):: * 多重描画モード_(Multiplots):: * 新しい出力形式とオプション_(New_terminals_and_terminal_options):: * ウォッチポイント_(Watchpoints):: * 週曜日のサポート_(Week-date_time_support):: * その他の新しい機能:: * バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5):: @end menu @node 関数ブロックと局所変数_(Function_blocks_and_scoped_variables), 特殊関数と複素数値関数_(Special_and_complex-valued_functions), バージョン_6_での新しい機能_(New_features_in_version_6), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 関数ブロックと局所変数 (Function blocks and scoped variables) @c ?new function blocks この版の gnuplot では、標準的な gnuplot コマンドのブロックを呼び出して 関数として使える機能を導入しています。関数ブロックは、0 から 9 個の引 数を使えて、一つの値を返します。関数ブロックは、計算した新しい値を変数 に割り当てたり、異なる関数や演算子を結合したり、与えられたデータに対す る繰り返しの作業を行ったりするのに使うことができます。 この仕組みには、3 つの要素があります。 以下参照: @ref{local}, `scope`, `function blocks`, @ref{return}。 @itemize @bullet @item 修飾子 @ref{local} は、変数や配列のオプション宣言で、そのスコープは、そ れが書かれているプログラム単位の実行中のみに制限されます。単位とは、 現在は、@ref{load} や @ref{call} 文の実行単位、関数ブロック評価、そして @ref{if}, `else`, `do for`, `while` に続く中かっこで囲まれたコードブロック単位 です。局所 (local) 変数の名前が大域 (global) 変数の名前とぶつかる場 合は、その局所スコープから抜けるまでは大域変数は隠されます。 @item コマンド `function` は、gnuplot コマンドからなる名前付き関数ブロック (実際はある文字列の配列) を宣言します。関数ブロックを呼び出すと、そ のコマンドが、ブロックの最後になるか、または @ref{return} コマンドに当た るまで、順次実行されます。 @item コマンド `return ` は、関数ブロックの実行を終了します。 式 の評価の結果が、その関数の値として返されます。関数ブ ロックの外では、どこでも @ref{return} は @ref{exit} と同様に動作します。 @end itemize この仕組みを使って、単純な一行の関数定義 `f(x) = ...` よりもっと複雑で 自明ではない関数を定義し、描画する例として、`function_block.dem` を参 照してください。 @node 特殊関数と複素数値関数_(Special_and_complex-valued_functions), 新しい描画スタイル_(New_plot_styles), 関数ブロックと局所変数_(Function_blocks_and_scoped_variables), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 特殊関数と複素数値関数 (Special and complex-valued functions) @c ?new math gnuplot バージョン 6 は、膨大な複素数値関数群と、以前のバージョンにあ った関数の改良版をいくつか提供します。 @itemize @bullet @item 新規: 複素変数、複素数値のリーマンゼータ (ζ) 関数。以下参照: @ref{zeta}。 @item (正規化) 下方不完全ガンマ関数の定義域と精度の改良。複素引数が可能に。 以下参照: `igamma`。 @item 上方不完全ガンマ関数を新規追加 (実引数のみ)。 以下参照: @ref{uigamma}。 @item (正規化) 不完全ベータ関数の定義域と精度の改良。 以下参照: `ibeta`。 @item 逆 (正規化) 不完全ガンマ関数を新しく追加。 以下参照: `invigamma`。 @item 逆 (正規化) 不完全ベータ関数を新しく追加。 以下参照: `invibeta`。 @item 多価関数 W_k(z) の第 k 分岐を返す複素関数 LambertW(z,k) を新しく追加。 @c ^
古い lambertw(x) は real(LambertW( real(z), 0 )) であることに注意。 以下参照: @ref{LambertW}。 @item 複素関数 lnGamma(z) を新しく追加。 既にある lgamma(x) は real(lnGamma(real(z)) であることに注意。 以下参照: @ref{lnGamma}。 @item z の複素共役を返す複素関数 conj(z) @item (第 1) シンクロトロン関数 F(x)。以下参照: `SynchrotronF`。 @item acosh(z) の定義域を負の実数軸を覆うように拡張。 @item asin(z) asinh(z) の複素数引数に対する精度の改良。 @item 便利なように I = sqrt(-1) = @{0,1@} を定義済み変数に。 @c ^
gnuplot は @{a,b@} を正しい複素数定数と見なしてくれませんが、しかし (a + b*I) なら正しい複素数数式として受けつけてくれるので有用です。 @end itemize ビルド時に適切な外部ライブラリがあれば、さらにいくつかの特殊関数をサポ ートします。以下参照: `special_functions`。 @itemize @bullet @item ν 次 (実数) の、引数 z に対する複素ベッセル関数 Iν(z), Jν(z), Kν(z), Yν(z)。以下参照: `BesselK`。 @item ν 次 (実数) の、引数 z に対する複素ハンケル関数 H1ν(z), H2ν(z)。 以下参照: `BesselH1`。 @item 複素エアリー関数 Ai(z), Bi(z)。 @item n 次の複素指数積分。以下参照: `expint`。 @item フレネル積分 C(x), S(x)。以下参照: `FresnelC`。 @item Voigt プロファイルの半値全幅を返す関数 `VP_fwhm(sigma,gamma)`。以下 参照: `VP`, `VP_fwhm`。 @end itemize @node 新しい描画スタイル_(New_plot_styles), 凸包とマスクと平滑化_(Hulls, 特殊関数と複素数値関数_(Special_and_complex-valued_functions), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 新しい描画スタイル (New plot styles) @c ?new styles @itemize @bullet @item 描画スタイル @ref{surface} は、2 次元極座標で動作し、平面を色塗りし た格子表現のグラフを生成します 色は入力点の任意の集合のからの寄与に よる重み付きよって色付けされます。これは、3 次元格子曲面を作る `dgrid3d`とスタイル `with pm3d` の類似品です。 以下参照: `set polar grid`, `polar heatmap`。 @item 新しい 2 次元描画スタイル `with sectors` は、完全な極座標格子面を生 成する別の仕組みです。これは概念上の極座標格子内に、各入力データ点毎 に丸い扇片をひとつ生成します。極座標モードでの @ref{surface} とは違 い、これは極座標グラフでも直交座標グラフでも使用できます。 @item 新しい 2 次元描画スタイル @ref{hsteps} は、存在するスタイル @ref{steps}, @ref{histeps}, @ref{fsteps}, @ref{fillsteps} が提供するもの、およびさらなる表現 の多様性を持つ step 系のグラフを生成できます。 @item 描画スタイル `with lines` には、現在フィルタオプション `sharpen` が あります。このフィルタは関数グラフでスパイクを検出しますが、そのピー クは関数から標本として取った 2 つの x 座標の間にあるため、出力では不 完全に切り取られてしまいます。このフィルタは、そのようなピーク点の場 所に新しい標本点を追加します。以下参照: `filters`。 @item これは厳密には新しい描画スタイルではありませんが、フィルタ concave hull と領域塗り潰しのパスに沿った平滑化を組み合わせることで、「膨ら んだ領域」グラフの作成が可能になります。これは例えば複数のデータのか たまりが重なっているものの広さを示します。以下参照: `concavehull`。 @item 3 次元描画スタイル `with pm3d` でオプション修飾子 `zclip [zmin:zmax]` が使えて、これは曲面全体のひとつの断面のみを選択します。クリッピング の境界値を増加させて連続描画を行うことで、3 次元では断面切り出しアニ メーションを見るのに使えますし、間を塗り潰した等高線図を作成するのに 使えます。これは、新しい描画スタイル @ref{contourfill} で自動化でき、 それは 2 次元射影で特に有用です。以下参照: @ref{contourfill}。 @end itemize D polargrid 4 DB D windrose 1 D sectors 4 DB D sharpen 1 D iris 2 DB D contourfill 4 DB D logic_timing 1 D rank_sequence 1 @node 凸包とマスクと平滑化_(Hulls, 名前付きパレット_(Named_palettes), 新しい描画スタイル_(New_plot_styles), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 凸包とマスクと平滑化 (Hulls, masks, and smoothing) @c ?new hulls @itemize @bullet @item 2 次元の点の集合を、その境界の多角形で置き換える新しいフィルタ `convexhull`。その境界の曲線を滑らかにするには、 "convexhull smooth path with filledcurves" を使って塗り潰し領域とし て描画することでできます。以下参照: `convexhull`。 @item 試験的なフィルタ `concavehull` は、凸とは限らない、凹の度合を制御す る特性長パラメータで決定されるχ-形状の、多角形のデータ境界を生成し ます。これはデータ点の回りの本質的なしみを描画します。以下参照: `concavehull`。 @item pm3d 曲面や image 描画の選択した一部分のみを表示するようマスクするの に、凸包 (convex hull) や他の多角形 (polygon) を使用できます。新しい 描画スタイル `with mask` (マスクを定義) や、キーワード `mask` (その 後の描画要素にマスクを適用する) を参照してください。 @item 閉曲線や x に関して単調ではない 2 次元曲線向きの、パスに沿った 3 次 元スプライン平滑化。以下参照: `smooth path`。これは、凸包やマスクの 平滑化も可能にします。 @item 3 次元曲線の 3 次スプライン平滑化。以下参照: `splot smooth csplines`。 @item 平滑化オプションは `with filledcurves @{above|below|between@}` での描 画にも適用します。 @item 周期的データの平滑化用の新しいキーワード `period`。以下参照: `smooth kdensity`。 @end itemize D convex_hull 2 D mask_pm3d 3 D smooth_path 2 @node 名前付きパレット_(Named_palettes), 新しいデータ形式_(New_data_formats), 凸包とマスクと平滑化_(Hulls, バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 名前付きパレット (Named palettes) @c ?new colormaps @itemize @bullet @item 現在のパレットをその後の利用のため名前付きカラーマップに保存できます。 以下参照: @ref{colormap}。 @item pm3d と image plot で以前保存したパレットを名前で指定できます。 これにより、一つの plot コマンドで複数のパレットを使用できます。 以下参照: `colorspec palette`。 @item 名前付きパレットカラーマップは、32-bit ARGB 色値の配列として操作でき ます。これにより、アルファチャネル値を追加したり、コマンド `set palette` では簡単に指定できない他の修正を可能にします。 @item 定義済みの新しい色機構 @ref{viridis}。 @item ファイルやデータブロックから読み込んだパレット (`set palette file`) は、実数の色成分か、24bit 形式の RGB 値のいずれかで指定できます。 @end itemize D named_palettes 4 D viridis 1 @node 新しいデータ形式_(New_data_formats), 新しい組み込み関数と配列操作_(New_built-in_functions_and_array_operations), 名前付きパレット_(Named_palettes), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 新しいデータ形式 (New data formats) @c ?new data_formats @itemize @bullet @item オプション `sparse matrix=(cols,rows)` は、`plot` と `splot` に、個 々のピクセル値を任意の順番で読みだすことができるような一様なピクセル 格子を生成させます。これは、不完全なデータから温度分布図 (heatmap) を描画するような場合に有用です。以下参照: `sparse`。 @item 非一様な matrix データの入力中、現在は column(0) はその matrix 要素 の線形順序を返します。すなわち、MxN matrix の A の要素 A[i,j] に対し ては、column(0)/M が行番号 i に、column(0)%M が列番号 j になります。 @end itemize @node 新しい組み込み関数と配列操作_(New_built-in_functions_and_array_operations), プログラムの流れの制御_(Program_control_flow), 新しいデータ形式_(New_data_formats), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 新しい組み込み関数と配列操作 (New built-in functions and array operations) @c ?new built-in functions @itemize @bullet @item cbrange 内の z に割当てる現在の RGB パレット色を返す関数 `palette(z)` @item 色名からその色の 32bit ARGB 値を返す関数 `rgbcolor("name")` @item 要素 Array[i] が element に等しい最初の添字 `i` を返す関数 `index( Array, element )`。以下参照: `arrays`。 @item 配列を引数とするユーザ定義関数の許可。 @c ^
例: dot(A,B) = sum [i=1:|A|] A[i]*B[i] @item 配列名に範囲を指定することで部分配列を実現。 Array[n] は単一の要素、Array[n:n+5] は元の配列の 6 要素を持つ部分配 列。以下参照: `arrays`, `slice`。 @item `split("string", "separator")` は、文字列 string に含まれるフィール ド要素を、文字列の配列に詰めて返します。以下参照: @ref{split}。 @item `join(array, "separator")` は、@ref{split} の逆で、文字列配列の要素を、 フィールド区切り文字 separator を間に挟んで結合して一つの文字列にし たものを返します。以下参照: @ref{join}。 @item `stats ` はテスト可能な値を出力。以下参照: @ref{test}。 @item `stats $vgrid` で格子内のボクセルの最小/最大/平均/標準偏差を調査 @end itemize @node プログラムの流れの制御_(Program_control_flow), 多重描画モード_(Multiplots), 新しい組み込み関数と配列操作_(New_built-in_functions_and_array_operations), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection プログラムの流れの制御 (Program control flow) @c ?control flow @itemize @bullet @item 新しい構文 `if ... else if ... else ...` @item gnuplot の設定選択で、XDG ベースのディレクトリ配置をサポートしていま す。gnuplot は、$XDG_CONFIG_HOME/gnuplot/gnuplotrc から初期コマンド を読み込みます。対話コマンド履歴は、$XDG_STATE_HOME/gnuplot_history に保存します。これらのファイルがない場合は、gnuplot の以前のバージョ ンと同様、$HOME/.gnuplot と $HOME/.gnuplot_history をそれぞれ使用し ます。 @item @ref{warnings} は、stderr への警告メッセージ出力を抑制します。 @item `warn "message"` は、ファイル名、行番号と "message" を stderr に出力 します。 @item コマンド "fit" に対する例外処理。fit エラーが起きた場合でも、制御を 常に入力の次の行に返します。エラーが起きた場合は、返ったときに FIT_ERROR がゼロでない値になります。これは、良くないフィッティングか ら復帰するスクリプトを可能にします。以下参照: `fit error_recovery`。 @end itemize @node 多重描画モード_(Multiplots), 新しい出力形式とオプション_(New_terminals_and_terminal_options), プログラムの流れの制御_(Program_control_flow), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 多重描画モード (Multiplots) @c ?new multiplots 現在は、多重描画グラフ (multiplot) の生成時に実行したコマンドを、デー タブロック $GPVAL_LAST_MULTIPLOT に保存します。そしてこれは、新しいコ マンド @ref{remultiplot} で再実行できます。保存したコマンドのうち再実行に 問題があるコマンドは、再実行はされません。再生成した多重描画グラフは、 その間にグラフの設定 (軸の範囲や対数軸設定等) が変更されていれば、元の ものと完全に一致するとは限りません。 以下のコマンド列は、元のグラフの状態と multiplot コマンドの両方をスク リプトファイルに保存し、後で再読み込みできるようにします。 @example save "my_multiplot.gp" set multiplot ... (グラフ要素を生成するいくつかのコマンドが並ぶ) ... unset multiplot set print "my_multiplot.gp" append print $GPVAL_LAST_MULTIPLOT unset print @end example @itemize @bullet @item 試験段階: コマンド @ref{replot} は、直近の plot コマンドが完了済みの multiplot の一部分であるかどうかをチェックします。もしそうなら、単一 の plot コマンドを実行する代わりに @ref{remultiplot} を実行します。 @item 試験段階: 多重描画グラフを表示している間のマウス操作では、現在は replot/refresh の要求を自動的に @ref{remultiplot} として処理します。 しかし、マウス座標の読み出し、拡大/視点移動の操作は、以前の gnuplot の版でそうだったように、最後の plot 要素に対する軸設定にのみ基づいて 行われます。$GPVAL_LAST_MULTIPLOT に保存されるコマンドが、各 plot 要 素に対する適切なグラフ設定を再生成するには不十分である可能性があるた め、multiplot でのマウス操作は、あなたが望むようなものにはならないか もしれません。これは今後改善されるかもしれません。 @end itemize @node 新しい出力形式とオプション_(New_terminals_and_terminal_options), ウォッチポイント_(Watchpoints), 多重描画モード_(Multiplots), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 新しい出力形式とオプション (New terminals and terminal options) @c ?new terminals @itemize @bullet @item 新しい出力形式 `kittygd` と `kittycairo` は、kitty プロトコルをサポ ートする端末エミュレータで、端末ウィンドウ上でのグラフィックを提供し ます。kitty は、sixel グラフィックとは別の選択肢で、24 ビット RGB フ ルカラーを提供します。以下参照: `kittycairo`。 @item 新しい出力形式 `block` は、疑似グラフィックのテキストモード用のもの で、`dumb` や `caca` 出力形式に対して改良された解像度を提供するため に Unicode ブロック、あるいは点字 (Braille 文字) を使用します。 @item 新しい出力形式 `webp` は、webp エンコーディングを用いて、単一フレー ムか、アニメーション列を生成します。各フレームは pngcairo で生成し、 その後 libwebp と libwebpmux による WebPAnimEncoder API を通してエン コードを行います。 @item `dumb`, `sixel`, `kitty`, `block` 出力形式のように、文字列出力とグラ フィック表示を同じウィンドウで行う出力形式では、現在はコマンド `pause mouse` の間はキーボード入力に反応します。その間、それらの出力 形式では、マウス操作が可能な出力形式が行うのと同じ方法でキー入力を解 釈します。以下参照: `pseudo-mousing`。 例えば、左/右/上/下矢印キーは、3 次元グラフでは視方向を変え、2 次元 グラフでは視点移動/拡大の増分ステップを実行します。 @end itemize @node ウォッチポイント_(Watchpoints), 週曜日のサポート_(Week-date_time_support), 新しい出力形式とオプション_(New_terminals_and_terminal_options), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection ウォッチポイント (Watchpoints) @c ?new watchpoints ウォッチポイントは、グラフ内の個々の曲線に関連する対象値です。曲線が描 画されるとき、各線分要素が、その両端点の間にウォッチポイント座標 (x, y か z) か関数 f(x,y) の対象値を含んでいるかを確認します。それが見つかっ た場合、そのマッチする点の座標 [x,y] を後で使用するために保存します。 以下参照: @ref{watchpoints}。 @itemize @bullet @item 2 つの曲線の交点を見つけること @item 関数のゼロ点を見つけること @item 従属変数 (y か z) か、関数 f(x,y) が指定値と一致する場所を見つけ表示 すること @item マウスを使って複数のグラフに沿った値を同時に追跡すること @end itemize @node 週曜日のサポート_(Week-date_time_support), その他の新しい機能, ウォッチポイント_(Watchpoints), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection 週曜日のサポート (Week-date time support) @c ?new week-date time 2020-2021 年に起きた新型コロナウィルス (Covid-19) の騒動では、疫学的デ ータのグラフ化の関心が高まりましたが、そこでは報告の慣習として、よく 「週曜日」を使った表が示されていました。この慣習に対する gnuplot のサ ポートの不足は改善し、週曜日もサポートするように拡張してあります。 @itemize @bullet @item 日時書式 %W は、ISO 8601 の週曜日規則に従うようになりました。 @item 日時書式 %U は、CDC/MMWR の週曜日規則に従うようになりました。 @item 新しい関数 `tm_week(time, std)` は、ISO か CDC 規則でのその年の週番 号を返します。 @item 新しい関数 `weekdate_iso(year, week, day)` は、ISO 規則での週曜日を カレンダー時刻に変換します。 @item 新しい関数 `weekdate_cdc(year, week, day)` は、CDC 規則での週曜日を カレンダー時刻に変換します。 @end itemize D epi_data 1 @node その他の新しい機能, バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5), 週曜日のサポート_(Week-date_time_support), バージョン_6_での新しい機能_(New_features_in_version_6) @subsection その他の新しい機能 @c ?new other_features @itemize @bullet @item `時間軸の主目盛りと副目盛り用の時間単位` 時間軸の主目盛りと副目盛りは、minutes/hours/days/weeks/months/years を単位とする目盛り間隔指定を受け付けます。 以下参照: `set xtics`, `set mxtics time`。 @item `using` 指定内での文字列 $# は、現在の入力データ行にある全列数と評価 します。例えば、"plot FOO using 0:(column($# - 1))" は、各行の最後か ら一つ手前の列を描画します。 @item bin (箱) 用の、合計でなく平均を描画するキーワード `binvalue=avg` @item `set colorbox bottom` は、垂直なカラーボックスを右に配置する代わりに 水平なカラーボックスをグラフの下に配置します。 @item 交差する pm3d 曲面のレンダリングの改良 - 重なる曲面のタイルを、交差 曲線に沿って 2 つの部分に分割し、一方の曲面のタイルが他方の曲面を通 って不正に突き出てしまうことがないようにします。 @item pm3d 光源モデルに、ユーザ制御型のスポットライトを追加。以下参照: `set pm3d spotlight`。 @item key の全体の幅と列数を固定する新規オプション。以下参照: `key layout`。 @item `set pm3d border retrace` は、各 pm3d 四辺形の周りに、塗り潰し領域と 同じ色で境界を描きます。これは、原理的に視覚効果はありませんが、あま りよくない pdf や postscript ビューワのようなディスプレイモードで、 エイリアスによる副産物が導入されないようにします。 @item @ref{isotropic} は、2 次元グラフと 3 次元グラフの両方で、x, y, z 軸 のすべてのスケールが同じになるようにスケールを合わせます。 @item 変更: 文字の回転角が整数という制限はなくなりました。 @item 特別な (非数値の) 線種 (linetype) `lt nodraw`, `lt black`, `lt bgnd` 以下参照: `special_linetypes`。 @item データ駆動型の histogram グラフの色割り当て。以下参照: `histograms colors`。 @item 凡例 (key) の箱の位置は、gnuplot が他に行う仕組みによるどんな位置決 めに対しても、オフセットを与えることで手動で調整できます。以下参照: @ref{offset}。 @item plot と splot コマンドに対する新しいフィルタ `plot .. if (<式>)` は 式にマッチする入力行のみを選択します。以下参照: @ref{if}。 @end itemize @node バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5), , その他の新しい機能, バージョン_6_での新しい機能_(New_features_in_version_6) @subsection バージョン 5 で導入された機能の要約 (3 Brief summary of features introduced in version 5) @c ?new version_5 @cindex version_5 @menu * 5.4_で導入された機能_(Features_introduced_in_5.4):: * 5.2_で導入された機能_(Features_introduced_in_5.2):: * 5.0_で導入された機能_(Features_introduced_in_5.0):: @end menu @node 5.4_で導入された機能_(Features_introduced_in_5.4), 5.2_で導入された機能_(Features_introduced_in_5.2), バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5), バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5) @subsubsection 5.4 で導入された機能 (Features introduced in 5.4) @c ?new version_5 version_5.4 @c ?version_5 version_5.4 @itemize @bullet @item 数式と関数は 64 ビット整数演算を使用。以下参照: `integer`。 @item 2 次元描画スタイル @ref{polygons}, @ref{spiderplot}, `arrows` @item 3 次元描画スタイル @ref{boxes}, @ref{circles}, @ref{polygons}, `isosurface`, そ してその他ボクセル格子データの表現 @item データ前処理フィルタ `zsort` @item カスタマイズした凡例 (key) を作成する `keyentry` @item 新しい LaTeX 系出力形式 pict2e は、古い出力形式 `latex`, `emtex`, `eepic`, `tpic` の代わりです。古い出力形式はもはやデフォルトではビル ドしません。 @item @ref{pixmap} は、png/jpeg/gif 画像をピクスマップ画像として取り込み、 グラフやページの任意の位置に配置しスケール変換も可能 @item 拡張文字列モードで \U+xxxx (xxxx は 16 進値の 4 または 5 文字) で Unicode コードポイントが指定できるように。それは出力時に対応する UTF-8 バイト文字列に変換します。 @item @ref{parallelaxes} の書式の改変により、描画スタイル `histogram` や @ref{spiderplot} と同様な plot コマンド内部での便利な繰り返しが可能に @end itemize @node 5.2_で導入された機能_(Features_introduced_in_5.2), 5.0_で導入された機能_(Features_introduced_in_5.0), 5.4_で導入された機能_(Features_introduced_in_5.4), バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5) @subsubsection 5.2 で導入された機能 (Features introduced in 5.2) @c ?new version_5 version_5.2 @c ?version_5 version_5.2 @itemize @bullet @item 非線形座標系 (以下参照: @ref{nonlinear}) @item データの階級幅割り当ての自動化 (以下参照: `bins`) @item 2 次元ビースウォームグラフ。以下参照: @ref{jitter}。 @item 3 次元描画スタイル `zerrorfill` @item 3 次元光源モデルで陰影と反射光ハイライトを提供 (以下参照: `lighting`) @item 配列データ型と関連するコマンドや演算子。以下参照: `arrays`。 @item 新しい出力形式 `sixelgd`, `domterm` @item 相対時間 (間隔長) を処理する新しい書式指定子 tH tM tS。 以下参照: `time_specifiers`。 @end itemize @node 5.0_で導入された機能_(Features_introduced_in_5.0), , 5.2_で導入された機能_(Features_introduced_in_5.2), バージョン_5_で導入された機能の要約_(3_Brief_summary_of_features_introduced_in_version_5) @subsubsection 5.0 で導入された機能 (Features introduced in 5.0) @c ?new version_5 version_5.0 @c ?version_5 version_5.0 @itemize @bullet @item 出力形式に依存しない点線/破線型。 @item ひとつの plot での引き続く描画要素に使用するデフォルトの色の列は、色 弱者により容易に区別できるものに。 @item 新しい描画スタイル @ref{parallelaxes}, `with table`。 @item マウスがその上にあるときに有効になるハイパーテキストラベル。 @item 2 次元、3 次元関数描画や疑似ファイル '+', '++' での描画における明示 的なサンプリング範囲。 @item 新しいコマンド @ref{import} によるプラグインのサポート。外部の共有オブジ ェクトが提供する関数にユーザ定義関数名を割り当てます。 @end itemize @node バージョン_5_と_6_との違い_(2_Differences_between_versions_5_and_6), 開発ブランチ_(Development_branch_(version_6.1)), バージョン_6_での新しい機能_(New_features_in_version_6), Gnuplot @section バージョン 5 と 6 との違い (2 Differences between versions 5 and 6) バージョン 5 で導入したいくつかの変更は、gnuplot の以前のバージョン用 のスクリプトを失敗させる、または異なる振舞いをさせることがありました。 バージョン 6 で導入した変更では、そういうことはとても少ないです。 @menu * 非推奨な書式_(Deprecated_syntax):: @end menu @node 非推奨な書式_(Deprecated_syntax), , バージョン_5_と_6_との違い_(2_Differences_between_versions_5_and_6), バージョン_5_と_6_との違い_(2_Differences_between_versions_5_and_6) @subsection 非推奨な書式 (Deprecated syntax) @c ?deprecated syntax バージョン 5.4 では非推奨、6.0 では削除: @example # 繰り返しを行うために @ref{reread} を含むファイルを使用 N = 0; load "file-containing-reread"; file content: N = N+1 plot func(N,x) pause -1 if (N<5) reread @end example 現在の同等の機能: @example do for [N=1:5] @{ plot func(N, x) pause -1 @} @end example バージョン 5.4 では非推奨、6.0 では削除 @example set dgrid3d ,,foo # foo が意味する指示のキーワードがない @end example 現在は以下と同等 @example set dgrid3d qnorm foo # (例のみ、qnorm は単独のオプションでない) @end example バージョン 5.0 では非推奨、6.0 では削除 @example set style increment user @end example 現在は以下と同等 @example 必要な範囲の線種を "set linetype" を使用して再定義 明示的な "linestyle N" か "linestyle variable" の利用 @end example バージョン 5.0 では非推奨、6.0 では削除 @example show palette fit2rgbformulae @end example @node 開発ブランチ_(Development_branch_(version_6.1)), デモ、ネット上のサンプル_(Demos_and_Online_Examples), バージョン_5_と_6_との違い_(2_Differences_between_versions_5_and_6), Gnuplot @section 開発ブランチ (Development branch (version 6.1)) @cindex development バージョン 6.0 は最も最近の gnuplot 安定リリース版です。新しい機能の開 発と破壊性を内在するソースコードの改変は、バージョン 6.1 と呼ばれる別な ブランチで行われています。開発ブランチのソースコードは、いつ何時でも変 更しうるので、起動時、あるいは `gnuplot --version` で表示される最終更 新日もチェックする必要があります。 以下に、まだ安定リリースには載せていない開発ブランチでの機能の部分的な 一覧を示します。一覧の先頭に近い項目は、現在のリリース版の引き続く更新 時 (6.0.x) に後方導入するかもしれません。このユーザーマニュアルは、そ れらに対する説明の予備を持っています。一覧の下の方にある項目は、バージ ョン 6.2 までは安定リリース版には導入しないかもしれません。 @itemize @bullet @item 新しい描画モード "with hsteps" @item 局所変数の実装の改良 @item バイナリデータファイルに対する空行の同等品。データ項目を分離するのに 空行を必要とするような描画スタイルに対するバイナリ入力をサポートする のに必要。 @item "linestyle variable" @item 3 次元面体に対する pm3d 色付け (例えば Delaunay モザイク曲面) @item splot with contourfill at base @item plot と splot に条件式を与える入力データフィルタ。例えば `plot DATA using 2:3 if (stringcolumn(1) eq "ABC")` @item 以前外部スクリプト `gpsavediff` として配布してたものと同等の新しいコ マンド `save changes` @item より頑健なスレッドによる wxt 出力ドライバの改良 @item 画像ファイルのデータ処理での gdlib の代用品 @item 配列要素に渡る繰り返し `array A; for [e in A] @{ ... @}` @item キーワード "sample" の非推奨 @item "marks" と呼ぶ新しいグラフィカルな物体のカテゴリ。これは、複雑な記号 を定義し、plot で利用できます。説明やデモはまだありません。 @end itemize @node デモ、ネット上のサンプル_(Demos_and_Online_Examples), バッチ/対話型操作_(Batch/Interactive), 開発ブランチ_(Development_branch_(version_6.1)), Gnuplot @section デモ、ネット上のサンプル (Demos and Online Examples) @cindex demos @c ?online examples @cindex examples `gnuplot` の配布物の `demo` ディレクトリ内には、多くのサンプルが収めら れています。これらのサンプルの png, svg, canvas 出力形式による出力を、 以下のネット上で見ることもできます: @uref{http://gnuplot.info/demos/,http://gnuplot.info/demos } そこでは、各デモを作成するコマンドがグラフの隣りに表示されますし、その gnuplot スクリプトをダウンロードすることもできますので、それを保存し同 様のグラフを作成することができます。 @node バッチ/対話型操作_(Batch/Interactive), キャンバスサイズ_(Canvas_size), デモ、ネット上のサンプル_(Demos_and_Online_Examples), Gnuplot @section バッチ/対話型操作 (Batch/Interactive) @cindex batch/interactive `gnuplot` は、バッチ処理形式、あるいは対話型のどちらの形式でも実行でき、 それらを組み合わせることも可能です。 コマンドライン引数は、プログラムへのオプションか、`gnuplot` コマンドを 含むファイルの名前であると解釈します。 各ファイルとコマンド文字列は、指定した順に実行します。 特別なファイル名 "-" は、コマンドを標準入力から読込むことを意味します。 最後のファイルを実行した後に `gnuplot` は終了します。読み込ませるファ イル、およびコマンド文字列を指定しなかった場合は、`gnuplot` は標準入力 からの対話型の入力を受け付けます。 @menu * コマンドラインオプション_(command_line_options):: * 例_(Examples):: @end menu @node コマンドラインオプション_(command_line_options), 例_(Examples), バッチ/対話型操作_(Batch/Interactive), バッチ/対話型操作_(Batch/Interactive) @subsection コマンドラインオプション (command line options) @cindex command-line-options @c ?batch/interactive command-line-options gnuplot は、コマンドラインで以下のオプションを受けつけます: @example -V, --version -h, --help -p, --persist -d, --default-settings -s, --slow -e "command1; command2; ..." -c scriptfile ARG1 ARG2 ... @end example -p は、プログラムの終了時に、残っている対話型グラフウィンドウを一切閉 じないよう gnuplot に指示します。 -d は、各ユーザ用、およびシステム用の初期化 (以下参照: `initialization`) を一切行わないよう gnuplot に指示します。 -s は、起動時のフォントの初期化をゆっくり待つように指示します。そうで ないと、エラーを表示し、不正なフォントサイズ情報で動作を継続します。 -e "command" は、次に進む前に指定した単一のコマンドを実行するよう gnuplot に指示します。 -c は、-e "call scriptfile ARG1 ARG2 ..." と同等です。以下参照: @ref{call}。 @node 例_(Examples), , コマンドラインオプション_(command_line_options), バッチ/対話型操作_(Batch/Interactive) @subsection 例 (Examples) @c ?batch/interactive examples 対話を開始する: @example gnuplot @end example バッチモードで 2 つのコマンドファイル "input1", "input2" を実行: @example gnuplot input1 input2 @end example 初期化ファイル "header" の後、対話型モードを起動し、その後別のコマンド ファイル "tailer" を実行する: @example gnuplot header - trailer @end example コマンドラインから `gnuplot` コマンドを直接与え、終了後にスクリーン上 にグラフが残るようにオプション "-persist" を使う: @example gnuplot -persist -e "set title 'Sine curve'; plot sin(x)" @end example ファイルのコマンドを実行する前に、ユーザ定義変数 a と s をセットする: @example gnuplot -e "a=2; s='file.png'" input.gpl @end example @node キャンバスサイズ_(Canvas_size), コマンドライン編集_(Command-line-editing), バッチ/対話型操作_(Batch/Interactive), Gnuplot @section キャンバスサイズ (Canvas size) @c ?canvas size @cindex canvas @c ?set term size ここの文書で使用する "canvas" という用語は、グラフやそれに関連するラベ ルやタイトル、凡例などを配置するのに利用可能な描画領域全体を意味します。 注意: HTML5 canvas 出力形式に関する情報を知りたい場合は、以下参照: `set term canvas`。 `set term size , ` は、出力ファイルのサイズ、 または "キャンバス" のサイズを制御します。デフォルトでは、グラフはその キャンバス全体に描画されます。 `set size , ` は、描画自体をキャンバスのサイズに対して相対的に 伸縮させます。1 より小さい伸縮値を指定すると、グラフはキャンバス全体を 埋めず、1 より大きい伸縮値を指定すると、グラフの一部分のみがキャンバス 全体に合うように描画されます。1 より大きい伸縮値を指定すると、問題が起 こるかもしれないことに注意してください。 例: @example set size 0.5, 0.5 set term png size 600, 400 set output "figure.png" plot "data" with lines @end example このコマンドは、幅 600 ピクセル、高さ 400 ピクセルの出力ファイル "figure.png" を生成します。グラフはキャンバスの中の左下に置かれます。 注意: gnuplot の以前のバージョンでは、`set size` を出力キャンバスのサ イズ自体を制御するのに使用する出力形式がありましたが、それはバージョン 4 で非推奨となっています。 @node コマンドライン編集_(Command-line-editing), コメント_(Comments), キャンバスサイズ_(Canvas_size), Gnuplot @section コマンドライン編集 (Command-line-editing) @cindex line-editing @cindex editing @cindex command-line-editing コマンドラインでの編集機能とコマンドヒストリの機能は、外部の GNU readline ライブラリか外部の BSD libedit ライブラリ、または組み込まれて いる同等のもののいずれかを使ってサポートしています。この選択は、 gnuplot のコンパイル時の configure のオプションで行います。 組み込みの readline 版の場合の編集コマンドは以下の通りですが、DEL キー に関する動作はシステムに依存することに注意してください。GNU readline ライブラリと BSD libedit ライブラリに関しては、それ自身のドキュメント を参照してください。 @example `行編集`: @end example @example ^B 1 文字前へ戻す ^F 1 文字先へ進める ^A 行の先頭に移動 ^E 行の最後に移動 ^H 直前の文字を削除 DEL 現在の文字を削除 ^D 現在位置の文字を削除、空行なら EOF を送信 ^K 現在位置から行末まで削除 ^L 壊れた表示の行を再表示 ^U 行全体の削除 ^W 直前の単語を削除 ^V この次のキーを編集コマンドと見なさない TAB ファイル名補完動作 @end example @example `履歴`: @end example @example ^P 前の履歴へ移動 ^N 次の履歴へ移動 ^R 後方検索を開始 @end example @c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
文字 機能
行編集
^B 1 文字前へ戻す
^F 1 文字先へ進める
^A 行の先頭へ移動
^E 行の最後へ移動
^H 直前の文字を削除
DEL 現在の文字を削除
^D 現在位置の文字を削除、空行なら EOF
^K 現在位置から行末まで削除
^L 壊れた表示の行を再表示
^U 行全体の削除
^W 直前の単語を削除
^V この次のキーを編集コマンドと見なさない
TAB ファイル名補完動作
履歴
^P 前の履歴へ移動
^N 次の履歴へ移動
^R 後方検索を開始
@node コメント_(Comments), 座標系_(Coordinates), コマンドライン編集_(Command-line-editing), Gnuplot @section コメント (Comments) @cindex comments コメント記号 `#` は、コマンド行中のほとんどどこにでも書くことができま す。このとき `gnuplot` は、その行の残りの部分を無視します。ただし、記 号 `#` は引用符内ではこの効果がありません。コメント行が '\' で終わって いる場合、次の行もコメントの一部として扱われることに注意してください。 データファイルに対するコメント文字の指定については、以下参照: `set datafile commentschars`。 @node 座標系_(Coordinates), 文字列データ_(Datastrings), コメント_(Comments), Gnuplot @section 座標系 (Coordinates) @cindex coordinates @cindex axes コマンド `set arrow`, `set key`, `set label`, `set object` はグラフ上 の任意の位置が指定できます。その位置は以下の書式で指定します: @example @{@} , @{@} @{,@{@} @} @end example 各座標系指定 には、`first`, `second`, `polar`, `graph`, `screen`, `character` のいずれかが入ります。 `first` は左と下の軸で定義される x,y (3D の場合は z も) の座標系を使用 します。`second` は x2, y2 軸 (上と右の軸) を使用します。`graph` はグ ラフ描画領域内の相対的位置を指定し、左下が 0,0 で 右上が 1,1 (splot の 場合はグラフ描画領域内の左下が 0,0,0 で、土台の位置は負の z の値を使用 します。以下参照: `set xyplane`) となります。`screen` は表示範囲内 (範 囲全体であり、`set size` で選択される一部分ではありません) を指定し、 左下が 0,0 で 右上が 1,1 となります。`character` 座標は主にずれを指定 するのに使用し、絶対的な位置を示すものではありません。`character` の水 平、垂直サイズは、現在使用しているフォントに依存します。 `polar` は、最初の 2 つの値を、x, y ではなく、角 theta と半径 r である と解釈します。これは、例えば 2 次元の極座標、あるいは 3 次元円柱座標で のグラフにラベルを配置するのに役に立つでしょう。 x の座標系が指定されていない場合は `first` が使われます。y の座標系が 指定されていない場合は x に対する座標系が使用されます。 与える座標が絶対的な位置ではなくて相対的な値である場合もあります (例え ば `set arrow` ... `rto` の 2 番目の数値)。そのほとんどが、与えられた 数値を最初の位置に対する差として使います。与えられた座標が対数軸内にあ る場合は、その相対的な値は倍率として解釈されます。例えば @example set logscale x set arrow 100,5 rto 10,2 @end example は、x 軸が対数軸で y 軸が線形の軸なので、100,5 の位置から 1000,7 の位 置への矢印を書くことになります。 一つ (あるいはそれ以上) の軸が時間軸である場合、`timefmt` の書式文字列 に従って、引用符で囲まれた時間文字列で適切な座標を指定する必要がありま す。以下参照: `set xdata`, `set timefmt`。また、`gnuplot` は整数表記も 認めていて、その場合その整数は 1970 年 1 月 1 日からの秒数と解釈されま す。 @node 文字列データ_(Datastrings), 拡張文字列処理モード_(Enhanced_text_mode), 座標系_(Coordinates), Gnuplot @section 文字列データ (Datastrings) @cindex datastrings データファイルには、ホワイトスペース (空白やタブ) を含まない任意の印字 可能な文字列、あるいは 2 重引用符で囲まれた任意の文字列 (ホワイトスペ ースが含まれても良い)、のいずれかの形からなる文字列データを持たせるこ とも可能です。データファイルに次のような行が含まれている場合、それは 4 つの列を含み、3 列目がテキスト部分であると見なされます: @example 1.000 2.000 "Third column is all of this text" 4.00 @end example テキスト部分は 2 次元や 3 次元描画内で例えば以下のように使用されます: @example plot 'datafile' using 1:2:4 with labels splot 'datafile' using 1:2:3:4 with labels @end example テキスト部分の列データは 1 つ、または複数の描画軸の目盛りのラベルとし て使用できます。次の例は、入力データの 3 列目と 4 列目を (X,Y) 座標と して取り出し、それらの点の列を結ぶ線分を描画します。しかしこの場合 gnuplot は、x 軸に沿って標準的に間の空いた数字ラベルのついた目盛り刻み をつけるのではなく、入力データファイルの 1 行目の X 座標の位置に、目盛 り刻みと文字列を x 軸に沿ってつけて行きます。 @example set xtics plot 'datafile' using 3:4:xticlabels(1) with linespoints @end example @cindex columnheader 入力データの列の最初のエントリ (すなわち列の見出し) をテキスト部分と解 釈するもう一つのオプションがあり、それはテキスト部分を、その描画した列 のデータの凡例 (key) のタイトル部分として使用します。次の例は、先頭の 行の 2 列目の部分を凡例ボックス内のタイトルを生成するのに使用し、その 後の列の 2,4 列目は要求された曲線を描画するのに処理されます: @example plot 'datafile' using 1:(f($2)/$4) with lines title columnhead(2) @end example 別の例: @example plot for [i=2:6] 'datafile' using i title "Results for ".columnhead(i) @end example この列の先頭を使用する方法は、@ref{columnheaders} か `set key autotitle columnhead` で自動化できます。以下参照: @ref{labels}, `using xticlabels`, @ref{title}, `using`, `key autotitle`。 @node 拡張文字列処理モード_(Enhanced_text_mode), 環境変数_(Environment), 文字列データ_(Datastrings), Gnuplot @section 拡張文字列処理モード (Enhanced text mode) @c ?enhanced text @cindex enhanced @cindex text_markup @cindex markup @cindex bold @cindex italic 多くの出力形式が、拡張文字列処理モード (enhanced text mode) をサポート しています。これは、文字列に追加の書式情報を埋めこみます。例えば "x^2" は x の自乗を、通常我々が見る上付きの 2 がついた形で書き出します。この モードは、出力形式の設定時にデフォルトとして選択されますが、その後で `set termoption [no]enhanced` を使ってその機能を有効/無効にもできます し、`set label "x_2" noenhanced` のように個別の文字列に対して無効にす ることもできます。 注意: TeX ベースの出力形式 (例えば cairolatex, pict2e, pslatex, tikz) の出力では、すべてのテキスト文字列には、これの代わりに TeX/LaTeX の書 式を使用すべきです。以下参照: `latex`。 @example 制御記号 例 説明 ^ a^x 上付き文字 _ a_x 下付き文字 @@ @@x, a@@^b_@{cd@} 空ボックス (幅がない) & &@{space@} 指定した長さのスペースを挿入 ~ ~a@{.8-@} 'a' の上に '-' を、現在のフォントサ イズの .8 倍持ち上げた位置に重ね書き @{/Times abc@} Times フォント、今のサイズで abc を出力 @{/Times*2 abc@} Times フォント、今の倍のサイズで abc @{/Times:Italic abc@} TImes フォント、イタリック体で abc @{/Arial:Bold=20 abc@} Arial フォント、太字、サイズ 20 で abc \U+ \U+221E Unicode コードポイント U+221E (無限大) @end example @c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
制御記号 説明
^ a^x 上付き文字
_ a_x 下付き文字
@@ @@x, a@@^b_@{cd@} 空ボックス (幅がない)
& &@{space@} 指定した長さのスペースを挿入
~ ~a@{.8-@} 'a' の上に '-' を、現在のフォントサ
イズの .8 倍持ち上げた位置に重ね書き
書式制御文字は、それに続く 1 文字、または中カッコで囲まれたものに適用 されます。中カッコ内には、例えば 2^@{10@} のような追加の書式文字列のない 文字列か、またはフォントの属性を変更する追加制御文字列を入れることがで きます。フォント指定は、開き中カッコ '@{' の直後に続く '/' のすぐ次に書 かなければ「いけません」。フォント名にスペースが含まれる場合、それを単 一、または二重引用符で囲まなければいけません。 例: 最初の例はその中カッコの入れ子を示していて、ボールド体の A にイタ リック体の下付きの添字 i がついたものが、いずれも現在のフォントで描か れます。この例の :Normal を取ると、下付きの添字はボールド体でかつイタ リック体になります。2 つ目の例は同じ書式制御を 20 ポイントサイズの "Times New Roman" フォントに適用したものです。 @example @{/:Bold A_@{/:Normal@{/:Italic i@}@}@} @{/"Times New Roman":Bold=20 A_@{/:Normal@{/:Italic i@}@}@} @end example 空ボックス (phantom box) は a@@^b_c の上付き文字と下付き文字を揃えると きに有用ですが、文字にダイアクリティカルマークを重ねる場合にはうまく働 きません。その目的のためには、アクセントやその他のダイアクリティカルマ ークのある文字を持つエンコード (例えば utf8) を使用する方がいいでしょ う。以下参照: `set encoding`。そのボックスはスペーシングが行なわれない ので、ボックス内 (つまり @@ の後ろ) の上付き文字や下付き文字を短く出力 するのに適しています。 ある文字列と同じ長さのスペースを文字 '&' を使うことで入れることができ ます。すなわち、 @example 'abc&@{def@}ghi' @end example は以下を生成します (abc と ghi の間は 3 文字分の空白): @example 'abc ghi' @end example 文字 '~' は、次の文字、またはカッコで囲まれた文字列に、それに続く文字 またはカッコで囲まれた文字列を重ね書きします。2 番目の文字は最初の文字 にあわせて水平方向にセンタリングされます。よって '~a/' は 'a' を貫くよ うなスラッシュが得られます。2 番目の文字は、その前に数字を置くことで垂 直方向に移動させることができます。その数字は現在のフォントサイズに対す る割合を意味し、それに従って文字が上がったり下がったりします。この場合 数字と文字列は 1 文字より長くなるのでカッコで囲む必要があります。重ね 書きされる文字列が数字から始まっている場合は、垂直にずらす値と文字列と の間にスペースを入れてください ('~@{abc@}@{.5 000@}')。それ以外はスペース は不要です ('~@{abc@}@{.5---@}')。一方、あるいは両方のフォントを変更するこ ともできます ('~a@{.5 /*.2 o@}'; 'a' その 1/5 の大きさの 'o'、この場合数 字とスラッシュの間のスペースは必要です) が、その文字列が始まった後で変 更することはできません。それぞれの文字列内で、他の特殊な書式を使うこと もできません。制御文字はエスケープしないといけません。例: サーカムフレ ックス付きの a (\U+00E2) を印字するには '~a@{.8\^@}' とします。 二重引用符内の文字列は単一引用符内の文字列とは異なって解釈されることに 注意してください。主な違いは、二重引用符内の文字列ではバックスラッシュ は 2 つ重ねる必要があることです。 gnuplot ソース配布物内の /docs/psdoc サブディレクトリにあるファイル "ps_guide.ps" に、拡張された書式に関する例が載っています。同様のものが デモ @uref{http://www.gnuplot.info/demo/enhanced_utf8.html,`enhanced_utf8.dem` } にもあります。 @menu * エスケープシーケンス_(escape_sequences):: @end menu @node エスケープシーケンス_(escape_sequences), , 拡張文字列処理モード_(Enhanced_text_mode), 拡張文字列処理モード_(Enhanced_text_mode) @subsection エスケープシーケンス (escape sequences) @c ?escape sequences @c ?enhanced text escape sequences @cindex unicode バックスラッシュ文字 \ は、1 バイト文字コード、または Unicode コードポ イントをエスケープするのに使います。 \ooo の形式 (ooo は 8 進値の 3 文字) は、特定のフォントエンコード内の 文字コード番号を指し示すのに使えます。例えば、Adobe Symbol フォントは、 無限大の記号を 8 進 245 番で示すようなカスタムエンコードを使用します。 これは、拡張文字列としてフォント名と文字コードを "@{/Symbol \245@}" のよ うに指定することで埋め込むことができます。これは主に PostScript 出力形 式で有用ですが、これは UTF-8 エンコーディングの処理は容易には行えませ ん。 \U+hhhh の形式の Unicode のコードポイントで文字を指定することができま す。ここで hhhh は 16 進値の 4 または 5 文字です。例えば、無限大の記号 ∞のコードポイントは \U+221E です。これは、必要ならば出力時に UTF-8 の バイト列に変換されます。UTF-8 環境では、印字可能な特殊文字は他の文字と 同様に文字列内で処理できるので、この仕組みは必要ありません。しかしこれ は結合文字や発音区別符号 (例えばベクトルを意味するための文字の上の矢印 など) には有用です。以下参照: `set encoding`, `utf8`。または @uref{http://www.gnuplot.info/demo_5.4/unicode.html,オンラインユニコードデモ } を参照。 @node 環境変数_(Environment), 式_(Expressions), 拡張文字列処理モード_(Enhanced_text_mode), Gnuplot @section 環境変数 (Environment) @cindex environment `gnuplot` は多くのシェル環境変数を認識します。必須のものはありません。 GNUTERM は、それが定義されていれば、起動時に "set term" に渡されます。 これは、システム、または個人的な初期化ファイルによる指定 (以下参照: `startup`)。や、もちろんその後の明示的な `set term` コマンドによる指定 で変更できます。 terminal オプションを入れることもできます。例: @example bash$ export GNUTERM="postscript eps color size 5in, 3in" @end example GNUHELP は、それが定義されていれば、ヘルプファイル (gnuplot.gih) のパ ス名に設定します。 起動時の初期化には、設定ファイル $HOME/.gnuplot と $XDG_CONFIG_HOME/gnuplot/gnuplotrc を探します。MS-DOS, Windows, OS/2 では GNUPLOT か USERPROFILE で指定されたファイルを探します。詳細につい ては以下参照: `startup`。 Unix においては、PAGER がヘルプメッセージの出力用のフィルタとして使わ れます。 Unix では、SHELL が `shell` コマンドの際に使われます。MS-DOS, OS/2 で は COMSPEC が使われます。 FIT_SCRIPT は、当てはめ (fit) が中断されたときに実行する `gnuplot` コ マンドの指定に使われます。以下参照: `fit`。FIT_LOG は当てはめによるロ グファイルのデフォルトのファイル名の指定に使われます。 GNUPLOT_LIB は、データやコマンドファイルの検索ディレクトリを追加定義す るのに使われます。その変数は、一つのディレクトリ名かまたは複数のディレ クトリ名を書くことができますが、ディレクトリの区切りはプラットホーム毎 に違います。例えば Unix では ':' で、MS-DOS, Windows, OS/2 では ';' で す。GNUPLOT_LIB の値は変数 `loadpath` に追加されますが、それは @ref{save} や `save set` コマンドでは保存されません。 出力ドライバの中には gd ライブラリ経由で TrueType フォントを扱えるもの もいくつかあります (以下参照: `fonts`)。これらの出力形式では、 GDFONTPATH や GNUPLOT_DEFAULT_GDFONT がフォントの選択に影響を与えます。 postscript 出力ドライバは自分で持っているフォント検索パスを使いますが、 それは、環境変数 GNUPLOT_FONTPATH で制御できます。 PostScript ドライバは、外部 (組み込まれていない) 定義ファイルを探すた めに環境変数 GNUPLOT_PS_DIR を利用します。インストール時の作業により、 gnuplot にはそれらのファイルのコピーが組み込まれているか、またはデフォ ルトのパスが埋め込まれています。この変数は、postscript 出力形式でデフ ォルトのファイルの代わりにカスタマイズした prologue ファイルを使用する のに利用できます。以下参照: `postscript prologue`。 @node 式_(Expressions), フォント, 環境変数_(Environment), Gnuplot @section 式 (Expressions) @cindex expressions @cindex division 基本的には C, FORTRAN, Pascal, BASIC において利用可能な数学表現を使用 できます。 演算子の優先順位は C 言語の仕様に従います。数式中の空白文字 とタブ文字は無視されます。 gnuplot は "実数" と "整数" 演算を FORTRAN や C のように扱うということ に注意してください。"1", "-10" などは整数と見なされ、"1.0", "-10.0", "1e1", 3.5e-1 などは実数と見なされます。 これら 2 つのもっとも重要な違 いは割算です。整数の割算は切り捨てられます: 5/2 = 2。実数はそうではあ りません: 5.0/2.0 = 2.5。それらが混在した式の場合、計算の前に整数は実 数に "拡張" されます: 5/2e0 = 2.5。負の整数を正の整数で割る場合、その 値はコンパイラによって変わります。"print -5/2" として、あなたのシステ ムが常に切り捨てる (-5/2 で -3 になる) のか、または 0 の近くに丸める (-5/2 で -2 になる) のかを確認してください。 数式 "1/0" は "未定義値 (undefined)" フラグを生成し、それによりその点 を無視します。あるいは、あらかじめ定義されている値 NaN を使っても同じ ことになります。例については、以下参照: `using`。 @cindex NaN gnuplot は文字列に対する単純な演算、および文字列変数も利用できます。例 えば式 ("A" . "B" eq "AB") は真と評価されますが、これは文字列の結合演 算子と文字列の等号演算子を意味しています。 数としての値を含む文字列は、それが数式で利用された場合は、対応する整数 や実数に変換されます。よって、("3" + "4" == 7) や (6.78 == "6.78") は どちらも真になります。整数は、それが文字列結合演算子で使われた場合は文 字列に変換されますが、実数や複素数はダメです。典型的な例は、ファイル名 や他の文字列内に整数を使う場合でしょう: 例えば ("file" . 4 eq "file4") は真です。 後置指定する範囲記述子 [beg:end] によって、部分文字列を指定することが できます。例えば、"ABCDEF"[3:4] == "CD" で、"ABCDEF"[4:*] == "DEF" で す。書式 "string"[beg:end] は、文字列値の組み込み関数 substr("strings",beg,end) を呼ぶこととほぼ同じですが、関数呼び出しでは beg, end は省略することはできません。 @menu * 複素数値_(Complex_values):: * 定数_(Constants):: * 関数_(Functions):: * 演算子_(operators):: * 和_(summation):: * 定義済み変数_(Gnuplot-defined_variables):: * ユーザ定義の変数と関数_(User-defined):: * 配列_(arrays):: @end menu @node 複素数値_(Complex_values), 定数_(Constants), 式_(Expressions), 式_(Expressions) @subsection 複素数値 (Complex values) @c ?complex values @cindex complex 計算の演算子とほとんどの組み込み関数は複素数引数の使用をサポートしてい ます。複素定数は、@{,@} と表記し、 は、数定 数である必要があります。よって、@{0,1@} は 'i' を意味します。 現在の gnuplot は、あらかじめ I = @{0,1@} を変数として定義していて、他の 変数から複素数値を作るのに使えるようにしています。つまり、`x + y*I` は 正しい数式なのですが、`@{x,y@}` はそうではありません。 複素数値 z の実数部分と虚数部分は、real(z), imag(z) として取り出せます。 長さは abs(z) で、偏角は arg(z) で得られます。 gnuplot の 2 次元と 3 次元の描画スタイルは、実数値を仮定しています。よ って 0 でない虚数部分を持つ複素数値関数 f(x) を描画する場合は、実数部 分や虚数部分、あるいは長さや偏角を描画させなければいけません。 例えば複素引数に対する関数 f(z) の複素数値の長さと偏角を表示させるには、 長さを曲面の高さ、偏角を色で表示するという手があります。 その場合、HSV 色空間のカラーパレットを用いて、0 から 1 の範囲の H 成分 (色相) を arg(z) が返す偏角の範囲 [-π:π] に割り当て、偏角が 1 周した ら色も巻き戻るようにすると便利でしょう。デフォルトでは、これは H = 0 (赤) から始まりますが、`set palette` の `start` キーワードを使ってその 開始位置を変更し、H の他の値を 0 に割り当てることも可能です。 以下の例は、H = 0.3 (緑) から開始し巻き戻るようにしています。以下参照: @ref{defined}, @ref{arg}, `set angles`。 @example set palette model HSV start 0.3 defined (0 0 1 1, 1 1 1 1) set cbrange [-pi:pi] set cbtics ("-π" -pi, "π" pi) set pm3d corners2color c1 E0(z) = exp(-z)/z I = @{0,1@} splot '++' using 1:2:(abs(E0(x+I*y))):(arg(E0(x+I*y))) with pm3d @end example @node 定数_(Constants), 関数_(Functions), 複素数値_(Complex_values), 式_(Expressions) @subsection 定数 (Constants) @cindex constants @c ?expressions constants @cindex octal @cindex hexadecimal @c ?complex constants 整数定数は、C の strtoll() ライブラリルーチンを使って解釈しますが、こ れは、"0" で始まる定数は 8 進数と、また "0x" か "0X" で始まる定数は 16 進数とみなすことを意味します。 実数 (浮動小数) 定数は、C の atof() ライブラリルーチンを使って解釈しま す。 複素数の定数は @{,@} と表現します。ここで (実部、虚部) は数値定数である必要があります。例えば、@{0,1@} は 'i' 自身 を表し、@{3,2@} は 3 + 2i を表します。これらには明示的に中カッコを使う必 要があります。この gnuplot では、あらかじめ I = @{0,1@} を変数として定義 して、明示的な形式の入力を避ける工夫をしています。例えば、`3 + 2*I` は `@{3,2@}` と同じですが、こちらは虚数成分に変数係数を使えるところが優位で す。すなわち、`x + y*I` は正しい数式ですが、`@{x,y@}` はそうではありませ ん。 文字列定数は単一引用符か二重引用符のいずれかで囲まれた任意の文字の並び からなるものです。単一引用符と二重引用符の違いは重要です。以下参照: `quotes`。 例: @example 1 -10 0xffaabb # 整数定数 1.0 -10. 1e1 3.5e-1 # 実数定数 @{1.2, -3.4@} # 複素数定数 "Line 1\nLine 2" # 文字列定数 (\n は改行に展開される) '123\na456' # 文字列定数 (\ と n はそのままの文字) @end example @node 関数_(Functions), 演算子_(operators), 定数_(Constants), 式_(Expressions) @subsection 関数 (Functions) @c ?expressions functions 特に注意がなければ、`gnuplot` の数学関数の引数は整数、実数、複素数の値 を取ることができます。角を引数や戻り値とする関数 (例えば sin(x)) は、 その値をラジアンとして扱いますが、これはコマンド `set angles` によって 度に変更できます。 @c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
数学ライブラリ、組み込み関数
関数 引数 戻り値
abs(x) 整数または実数 |x|, x の絶対値; 同じ型
abs(x) 複素数 x の長さ, √( Re(x)2 + Im(x)2 )
acos(x) 任意 cos-1 x (アークコサイン)
acosh(x) 任意 cosh-1 x (逆双曲余弦)
airy(x) 実数 実数の x に対するエアリー (Airy) 関数 Ai(x)
arg(x) 複素数 x の偏角
asin(x) 任意 sin-1 x (アークサイン)
asinh(x) 任意 sinh-1 x (逆双曲正弦)
atan(x) 任意 tan-1 x (アークタンジェント)
atan2(y,x) 整数または実数 tan-1(y/x) (アークタンジェント)
atanh(x) 任意 tanh-1 x (逆双曲正接)
besj0(x) 実数 ラジアンでの J0 ベッセル関数 (0 次ベッセル関数)
besj1(x) 実数 ラジアンでの J1 ベッセル関数 (1 次ベッセル関数)
besjn(n,x) 整数, 実数 ラジアンでの Jn ベッセル関数 (n 次ベッセル関数)
besy0(x) 実数 ラジアンでの Y0 ベッセル関数 (0 次ノイマン関数)
besy1(x) 実数 ラジアンでの Y1 ベッセル関数 (1 次ノイマン関数)
besyn(n,x) 整数, 実数 ラジアンでの Yn ベッセル関数 (n 次ノイマン関数)
besi0(x) 実数 ラジアンでの I0 変形ベッセル関数 (0 次変形ベッセル関数
besi1(x) 実数 ラジアンでの I1 変形ベッセル関数 (1 次変形ベッセル関数
besin(n,x) 整数, 実数 ラジアンでの In 変形ベッセル関数 (n 次変形ベッセル関数
cbrt(x) 実数 x の三乗根、定義域と値域は共に実数
ceil(x) 任意 x⌉, x (の実部) 以上の最小の整数
conj(x) 複素数 x の複素共役
cos(x) radians cos x, x のコサイン
cosh(x) 任意 cosh x, ラジアンでの x のハイパボリックコサイン
EllipticK(k) (-1:1) 内の実数 k K(k) 第 1 種完全楕円積分
EllipticE(k) [-1:1] 内の実数 k E(k) 第 2 種完全楕円積分
EllipticPi(n,k) 実数 n<1, (-1:1) 内の実数 k Π(n,k) 第 3 種完全楕円積分
erf(x) 任意 erf(Re(x)), x の実部の誤差関数
erfc(x) 任意 erfc(Re(x)), 1.0 - (x の実部の誤差関数)
exp(x) 任意 ex, x の指数関数
expint(n,x) 任意 En(x), x の指数積分
floor(x) 任意 x⌋, x (の実部) 以下の最大の整数
gamma(x) 任意 Γ(Re(x)), x の実部のガンマ関数
ibeta(p,q,x) 任意 ibeta(Re(p,q,x)), p,q,x の実部の不完全ベータ関数
inverf(x) 任意 x の実部の逆誤差関数
igamma(a,z) 複素数 igamma(a>0,z), 複素数 a>0,z の不完全ガンマ関数
imag(x) 複素数 Im(x), x の虚数部分 (実数)
int(x) 実数 x の整数部分 (0 に向かって丸め)
invibeta(a,b,p) 0<p<1 逆不完全ベータ関数
invigamma(a,p) 0<p<1 逆不完全ガンマ関数
invnorm(x) 任意 x の実部の逆正規分布関数
LambertW(z,k) 複素数, 整数 複素 Lambert W 関数の第 k 分岐
lambertw(x) 実数 Lambert W 関数の主値 (第 0 分岐)
lgamma(x) 実数 lgamma(Re(x)), x の実部のガンマ対数関数
lnGamma(x) 複素数 複素平面全体で正当な lnGamma(x)
log(x) 任意 ln x, x の自然対数 (底 e)
log10(x) 任意 log10 x, x の対数 (底 10)
norm(x) 任意 norm(x), x の実部の正規分布関数
rand(x) 整数 区間 (0:1) 内の疑似乱数
real(x) 任意 Re(x), x の実数部分
sgn(x) 任意 x > 0 なら 1, x < 0 なら -1, x = 0 なら 0. x の虚部は無視
Sign(x) 複素数 x = 0 なら 0、それ以外は x/|x|
sin(x) 任意 sin x, x のサイン
sinh(x) 任意 sinh x,ラジアンでの x のハイパボリックサイン
sqrt(x) 任意 x, x の平方根
SynchrotronF(x) 実数 (第 1) シンクロトロン関数 F
tan(x) 任意 tan x, x のタンジェント
tanh(x) 任意 tanh x, ラジアンでの x のハイパボリックタンジェント
uigamma(a,x) 実数 uigamma(a,x), 上方不完全ガンマ関数 a>0,x
voigt(x,y) 実数 ガウス関数とローレンツ関数の畳みこみ
zeta(s) 任意 リーマンゼータ関数
@c ^

 

@c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
libcerf (利用可能な場合のみ) による特殊関数
関数 引数 戻り値
cerf(z) 複素数 複素誤差関数
cdawson(z) 複素数 複素 Dawson 積分
faddeeva(z) 複素数 再スケール化複素誤差関数 w(z) = exp(-z2) × erfc(-iz)
erfi(x) 実数 虚誤差関数 erfi(x) = -i × erf(ix)
FresnelC(x) 実数 フレネル積分のコサイン (実数) 成分
FresnelS(x) 実数 フレネル積分のサイン (虚数) 成分
VP(x,sigma,gamma) 実数 Voigt プロファイル
VP_fwhm(sigma,gamma) 実数 Voigt プロファイルの半値全幅 (FWHM)
@c ^

 

@c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
文字列関数
関数 引数 戻り値
gprintf("format",x,...) 任意 gnuplot の書式解析器を適用した結果の文字列
sprintf("format",x,...) 複数個 C 言語の sprintf の返す文字列
strlen("string") 文字列 文字列の中の文字数
strstrt("string","key") 文字列 部分文字列 "key" が現れる先頭位置
substr("string",beg,end) 複数個 文字列 "string"[beg:end]
split("string","separator") 文字列 元の文字列の個々のフィールドを持つ配列
join(array,"separator") 配列, 文字列 配列要素を文字列に結合
strftime("timeformat",t) 任意 gnuplot による時刻解析結果の文字列
strptime("timeformat",s) 文字列 文字列 s を変換した 1970 年からの秒数
system("command") 文字列 シェルコマンドの出力を持つ文字列
trim(" string ") 文字列 前後につく空白を取り除いた文字列
word("string",n) 文字列, 整数 文字列 "string" の n 番目の単語
words("string") 文字列 文字列 "string" 中の単語数
@c ^

 

@c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
時刻関数
関数 引数 戻り値
time(x) 任意 現在のシステム時刻
timecolumn(N,format) 整数, 文字列 入力データの N 列目からの書式化日時データ
tm_hour(t) 秒数による時刻
tm_mday(t) 秒数による時刻 日 (その月の)
tm_min(t) 秒数による時刻
tm_mon(t) 秒数による時刻
tm_sec(t) 秒数による時刻
tm_wday(t) 秒数による時刻 その週の何日目
tm_week(t) 秒数による時刻 その年の週番号 (ISO 8601)
tm_yday(t) 秒数による時刻 その年の何日目
tm_year(t) 秒数による時刻 西暦
weekdate_iso(year,week,day) 整数 ISO 8601 規則での週曜日に対応する時刻
weekdate_cdc(year,week,day) 整数 CDC による疫学的週曜日に対応する時刻
@c ^

 

@c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
他の gnuplot の関数
関数 引数 戻り値
column(x) 整数か文字列 入力データ中の x 列目の内容
columnhead(x) 整数 データファイルの最初の x 列目中の文字列
exists("X") 文字列 変数名 X が定義されていれば 1, そうでなければ 0
hsv2rgb(h,s,v) [0:1] 内の実数 h,s,v HSV 色を 24ビットの RGB 色へ変換
index(A,x) 配列, 任意 A[i] が x に等しい i
palette(z) 実数 z に割り当てられた 24 ビット RGB パレット色
rgbcolor("name") 文字列 色名の 32 ビット ARGB 値
stringcolumn(x) 整数 文字列としての x 列目の内容
valid(x) 整数 データ入力中の x 列の正当性
value("name") 文字列 名前 name の変数の現在の値
@c ^ @menu * abs:: * acos:: * acosh:: * airy:: * arg:: * asin:: * asinh:: * atan:: * atan2:: * atanh:: * besj0:: * besj1:: * besjn:: * besy0:: * besy1:: * besyn:: * besi0:: * besi1:: * besin:: * cbrt:: * conj:: * cos:: * cosh:: * EllipticK:: * EllipticE:: * EllipticPi:: * erf:: * erfc:: * exp:: * gamma:: * inverf:: * imag:: * invnorm:: * lambertw:: * lgamma:: * lngamma:: * log:: * log10:: * norm:: * rand:: * real:: * sgn:: * Sign:: * sin:: * sinh:: * sqrt:: * tan:: * tanh:: * voigt:: * cerf:: * cdawson:: * faddeeva:: * erfi:: * Voigt_Profile:: * gprintf:: * sprintf:: * strlen:: * strstrt:: * substr:: * split:: * join:: * strftime:: * strptime:: * system:: * trim:: * word:: * words:: * exists:: * hsv2rgb:: * palette:: * rgbcolor:: * voxel:: * 整数変換関数_(int_floor_ceil_round)_(integer_conversion_functions):: * 種々の楕円積分_(elliptic_integrals):: * 複素エアリー関数__(Complex_Airy_functions):: * 複素ベッセル関数_(Complex_Bessel_functions):: * Expint:: * フレネル積分_(Fresnel_integrals_FresnelC(x)_and_FresnelS(x)):: * Gamma:: * Igamma:: * Invigamma:: * Ibeta:: * Invibeta:: * LambertW:: * lnGamma:: * 乱数の生成_(random):: * 複素引数の特殊関数_(Special_functions_with_complex_arguments):: * Synchrotron_function:: * 時刻関数_(Time_functions):: * uigamma:: * using_指定用関数_(using_specifier_functions):: * value:: * 単語の取り出しと単語数_(word:: * zeta:: @end menu @node abs, acos, 関数_(Functions), 関数_(Functions) @subsubsection abs @c ?expressions functions abs @cindex abs @findex abs 関数 `abs(x)` 引数の絶対値を返します。返り値の型は引数と同じです。 @cindex norm @findex norm @cindex modulus 複素数の引数に対しては, abs(x) は複素平面における x の長さと定義されて います [すなわち sqrt(real(x)**2 + imag(x)**2) ]。これは x のノルム (norm)、または x の複素絶対値 (modulus) とも呼ばれます。 @node acos, acosh, abs, 関数_(Functions) @subsubsection acos @c ?expressions functions acos @cindex acos @findex acos 関数 `acos(x)` は引数のアークコサイン (逆余弦) を返します。`acos` の返 す値がラジアン単位かまたは度であるかは `set angles` で選択されます。 @node acosh, airy, acos, 関数_(Functions) @subsubsection acosh @c ?expressions functions acosh @cindex acosh @findex acosh 関数 `acosh(x)` は逆ハイパボリックコサイン (逆双曲余弦) の値を、 `set angles` に従ってラジアンか度で返します。 @node airy, arg, acosh, 関数_(Functions) @subsubsection airy @c ?expressions functions airy @cindex airy @findex airy 関数 `airy(x)` は、エアリー (Airy) 関数 Ai(x) の値を返します。関数 Ai(x) は、微分方程式 y'' - x y = 0 の、実数全体で有界な解です。引数が 複素数の場合、その虚数部分は無視されます。 @node arg, asin, airy, 関数_(Functions) @subsubsection arg @c ?expressions functions arg @cindex arg @findex arg 関数 `arg(x)` は複素数の偏角を、`set angles` の設定にしたがってラジア ン、または度で返します。 @node asin, asinh, arg, 関数_(Functions) @subsubsection asin @c ?expressions functions asin @cindex asin @findex asin 関数 `asin(x)` は引数のアークサイン (逆正弦) を返します。`asin` の返す 値は `set angles` の設定によってラジアン単位かまたは度になります。 @node asinh, atan, asin, 関数_(Functions) @subsubsection asinh @c ?expressions functions asinh @cindex asinh @findex asinh 関数 `asinh(x)` は逆ハイパボリックサイン (逆双曲正弦) の値を、 `set angles` に従ってラジアンか度で返します。 @node atan, atan2, asinh, 関数_(Functions) @subsubsection atan @c ?expressions functions atan @cindex atan @findex atan 関数 `atan(x)` は引数のアークタンジェント (逆正接) の値を返します。 `atan` の返す値は `set angles` の設定によってラジアン単位かまたは度に なります。 @node atan2, atanh, atan, 関数_(Functions) @subsubsection atan2 @c ?expressions functions atan2 @cindex atan2 @findex atan2 関数 `atan2(y,x)` は引数の実数部分の比のアークタンジェント (逆正接) の 値を返します。@ref{atan2} は `set angles` の設定によってラジアン単位か度に なる、適切な四分円における値を返します。 @node atanh, besj0, atan2, 関数_(Functions) @subsubsection atanh @c ?expressions functions atanh @cindex atanh @findex atanh 関数 `atanh(x)` は逆ハイパボリックタンジェント (逆双曲正接) の値を、 `set angles` に従ってラジアンか度で返します。 @node besj0, besj1, atanh, 関数_(Functions) @subsubsection besj0 @c ?expressions functions besj0 @cindex besj0 @findex besj0 関数 `besj0(x)` は引数の J0 ベッセル関数 (0 次の第 1 種円柱関数 J0、0 次ベッセル関数) の値を返します。@ref{besj0} には引数はラジアンで与えます。 @node besj1, besjn, besj0, 関数_(Functions) @subsubsection besj1 @c ?expressions functions besj1 @cindex besj1 @findex besj1 関数 `besj1(x)` は引数の J1 ベッセル関数 (1 次の第 1 種円柱関数 J1、1 次ベッセル関数) の値を返します。@ref{besj1} には引数はラジアンで与えます。 @node besjn, besy0, besj1, 関数_(Functions) @subsubsection besjn @c ?expressions functions besjn @cindex besjn @findex besjn 関数 `besjn(n,x)` は引数の Jn ベッセル関数 (n 次の第 1 種円柱関数 Jn、 n 次ベッセル関数) の値を返します。引数 x はラジアンで与えます。 @node besy0, besy1, besjn, 関数_(Functions) @subsubsection besy0 @c ?expressions functions besy0 @cindex besy0 @findex besy0 関数 `besy0(x)` は引数の Y0 ベッセル関数 (0 次の第 2 種円柱関数 Y0、0 次ノイマン関数) の値を返します。@ref{besy0} には引数はラジアンで与えます。 @node besy1, besyn, besy0, 関数_(Functions) @subsubsection besy1 @c ?expressions functions besy1 @cindex besy1 @findex besy1 関数 `besy1(x)` は引数の Y1 ベッセル関数 (1 次の第 2 種円柱関数 Y1、1 次ノイマン関数) の値を返します。@ref{besy1} には引数はラジアンで与えます。 @node besyn, besi0, besy1, 関数_(Functions) @subsubsection besyn @c ?expressions functions besyn @cindex besyn @findex besyn 関数 `besyn(n,x)` は引数の Yn ベッセル関数 (n 次の第 2 種円柱関数 Yn、 n 次ノイマン関数) の値を返します。引数 x はラジアンで与えます。 @node besi0, besi1, besyn, 関数_(Functions) @subsubsection besi0 @c ?expressions functions besi0 @cindex besi0 @findex besi0 関数 `besi0(x)` は 0 次の変形ベッセル関数です。@ref{besi0} の引数の単位は ラジアンです。 @node besi1, besin, besi0, 関数_(Functions) @subsubsection besi1 @c ?expressions functions besi1 @cindex besi1 @findex besi1 関数 `besi1(x)` は 1 次の変形ベッセル関数です。@ref{besi1} の引数の単位は ラジアンです。 @node besin, cbrt, besi1, 関数_(Functions) @subsubsection besin @c ?expressions functions besin @cindex besin @findex besin 関数 `besin(n,x)` は n 次の変形ベッセル関数です。引数 x の単位はラジア ンです。 @node cbrt, conj, besin, 関数_(Functions) @subsubsection cbrt @c ?expressions functions cbrt @cindex cbrt @findex cbrt 関数 `cbrt(x)` は x の三乗根を返します。x が実数でない場合、NaN を返し ます。 @cindex ? `ceil(x)` は x の実部以上の最小の整数を返します。 |x|<2^52 の範囲外の場合、ceil(x) は NaN を返します。 @node conj, cos, cbrt, 関数_(Functions) @subsubsection conj @c ?expressions functions conj @cindex conj @findex conj 関数 `conj(x)` は、x の複素共役を返します。conj( @{r, i@} ) = @{r, -i@} @node cos, cosh, conj, 関数_(Functions) @subsubsection cos @c ?expressions functions cos @cindex cos @findex cos 関数 `cos(x)` は引数のコサイン (余弦) の値を返します。`cos` は `set angles` の選択にしたがって、ラジアンまたは度の引数を受け付けます。 @node cosh, EllipticK, cos, 関数_(Functions) @subsubsection cosh @c ?expressions functions cosh @cindex cosh @findex cosh 関数 `cosh(x)` は引数のハイパボリックコサインの値を返します。@ref{cosh} の 引数はラジアンで与えます。 @c ?expressions functions EllipticK @cindex EllipticK @findex EllipticK @node EllipticK, EllipticE, cosh, 関数_(Functions) @subsubsection EllipticK 関数 `EllipticK(k)` は、第 1 種完全楕円積分の値を返します。詳細は、以 下参照: `elliptic integrals`。 @c ?expressions functions EllipticE @cindex EllipticE @findex EllipticE @node EllipticE, EllipticPi, EllipticK, 関数_(Functions) @subsubsection EllipticE 関数 `EllipticE(k)` は、第 2 種完全楕円積分の値を返します。詳細は、以 下参照: `elliptic integrals`。 @c ?expressions functions EllipticPi @cindex EllipticPi @findex EllipticPi @node EllipticPi, erf, EllipticE, 関数_(Functions) @subsubsection EllipticPi 関数 `EllipticPi(n,k)` は、第 3 種完全楕円積分の値を返します。詳細は、 以下参照: `elliptic integrals`。 @node erf, erfc, EllipticPi, 関数_(Functions) @subsubsection erf @c ?expressions functions erf @cindex erf @findex erf 関数 `erf(x)` は引数の実部の誤差関数の値を返します。引数が複素数の場合 は虚部は無視されます。以下参照: @ref{cerf}, @ref{erfc}, @ref{inverf}, @ref{norm}。 @node erfc, exp, erf, 関数_(Functions) @subsubsection erfc @c ?expressions functions erfc @cindex erfc @findex erfc 関数 `erfc(x)` は 1.0 から、引数の実部の誤差関数の値を引いたものを返し ます。引数が複素数の場合は虚部は無視されます。以下参照: @ref{cerf}, `erf`, @ref{inverf}, @ref{norm}。 @node exp, gamma, erfc, 関数_(Functions) @subsubsection exp @c ?expressions functions exp @cindex exp @findex exp 関数 `exp(x)` は、`e` の x 乗の値を返しますが、x は整数でも、実数でも 複素数でも構いません。 @cindex ? @cindex ? `floor(x)` は x の実部以下の最大の整数を返します。 |x|<2^52 の範囲外の場合、floor(x) は NaN を返します。 @node gamma, inverf, exp, 関数_(Functions) @subsubsection gamma @c ?expressions functions gamma 関数 `gamma(x)` は引数の実部のガンマ関数の値を返します。整数 n に対し ては gamma(n+1) = n! です。引数が複素数の場合、虚数部分は無視されます。 複素引数に関しては、以下参照: @ref{lnGamma}。 @cindex ? @node inverf, imag, gamma, 関数_(Functions) @subsubsection inverf @c ?expressions functions inverf @cindex inverf @findex inverf 関数 `inverf(x)` は引数の実部の逆誤差関数の値を返します。以下参照: `erf`, @ref{invnorm}。 @cindex ? @node imag, invnorm, inverf, 関数_(Functions) @subsubsection imag @c ?expressions functions imag @cindex imag @findex imag 関数 `imag(x)` は引数の虚数部分を実数として返します。 @cindex ? `int(x)` は、引数の 0 に向かって丸めた整数部分を返します。 @node invnorm, lambertw, imag, 関数_(Functions) @subsubsection invnorm @c ?expressions functions invnorm @cindex invnorm @findex invnorm 関数 `invnorm(x)` は引数の実部に対する、正規分布 (ガウス分布) の累積分 布関数の逆関数の値を返します。以下参照: @ref{norm}。 @cindex ? @cindex ? @node lambertw, lgamma, invnorm, 関数_(Functions) @subsubsection lambertw @c ?expressions functions lambertw @cindex lambertw @findex lambertw 関数 `lambertw(x)` は Lambert の W 関数の主値 (第 0 分岐) を返します。 W 関数は、方程式 (W(x)*exp(W(x))=x によって定義されます。 x は、x >= -exp(-1) を満たす実数でなければいけません。 @node lgamma, lngamma, lambertw, 関数_(Functions) @subsubsection lgamma @c ?expressions functions lgamma @cindex lgamma @findex lgamma 関数 `lgamma(x)` は引数の実部のガンマ関数値の自然対数の値を返します。 引数が複素数の場合、虚部は無視されます。複素数には lnGamma(z) を使用し てください。 @node lngamma, log, lgamma, 関数_(Functions) @subsubsection lngamma 関数 `lnGamma(x)` は、ガンマ関数の自然対数値を返します。この実装は、複 素平面全体で正当な Lanczos 近似を使用しています。この値の虚数成分は、 負の実軸部分を除く全体で連続な曲面を生成するよう位相をずらしています。 @node log, log10, lngamma, 関数_(Functions) @subsubsection log @c ?expressions functions log @cindex log @findex log 関数 `log(x)` は引数の自然対数 (底 `e`) の値を返します。以下参照: @ref{log10}。 @node log10, norm, log, 関数_(Functions) @subsubsection log10 @c ?expressions functions log10 @cindex log10 @findex log10 関数 `log10(x)` は引数の対数 (底 10) を返します。 @node norm, rand, log10, 関数_(Functions) @subsubsection norm @c ?expressions functions norm @cindex norm @findex norm 関数 `norm(x)` は、引数の実部に対する、正規分布 (ガウス分布) の累積分 布関数の値を返します。以下参照: @ref{invnorm}, `erf`, @ref{erfc}。 @node rand, real, norm, 関数_(Functions) @subsubsection rand @c ?expressions functions rand @cindex rand @findex rand 関数 `rand(x)` は、開区間 (0:1) 内の疑似乱数を返します。詳しくは以下 参照: `random`。 @node real, sgn, rand, 関数_(Functions) @subsubsection real @c ?expressions functions real @cindex real @findex real 関数 `real(x)` は引数の実部を返します。 @cindex ? `round(x)` は、x の実部に一番近い整数を返します。 |x|<2^52 の範囲外の場合、round(x) は NaN を返します。 @node sgn, Sign, real, 関数_(Functions) @subsubsection sgn @c ?expressions functions sgn @cindex sgn @findex sgn 関数 `sgn(x)` は引数が正なら 1 を、負なら -1 を、0 ならば 0 を返します。 引数が複素数の場合虚部は無視されます。 @node Sign, sin, sgn, 関数_(Functions) @subsubsection Sign 関数 `Sign(x)` は、引数が 0 なら 0 を返し、それ以外の場合は複素数値 Sign(x) = x/|x| を返します。 @node sin, sinh, Sign, 関数_(Functions) @subsubsection sin @c ?expressions functions sin @cindex sin @findex sin 関数 `sin(x)` は引数のサイン (正弦) の値を返します。`sin` は `set angles` の選択にしたがって、ラジアンまたは度の引数を受け付けます。 @node sinh, sqrt, sin, 関数_(Functions) @subsubsection sinh @c ?expressions functions sinh @cindex sinh @findex sinh 関数 `sinh(x)` は引数のハイパボリックサインの値を返します。@ref{sinh} の 引数はラジアンで与えます。 @node sqrt, tan, sinh, 関数_(Functions) @subsubsection sqrt @c ?expressions functions sqrt @cindex sqrt @findex sqrt 関数 `sqrt(x)` は引数の平方根の値を返します。x が複素数の場合、これは 常に正の実部を持つ根を返します。 @cindex ? @node tan, tanh, sqrt, 関数_(Functions) @subsubsection tan @c ?expressions functions tan @cindex tan @findex tan 関数 `tan(x)` は引数のタンジェント (正接) の値を返します。`tan` は `set angles` の選択にしたがって、ラジアンまたは度の引数を受け付けます。 @node tanh, voigt, tan, 関数_(Functions) @subsubsection tanh @c ?expressions functions tanh @cindex tanh @findex tanh 関数 `tanh(x)` は引数のハイパボリックタンジェントの値を返します。 @ref{tanh} の引数はラジアンで与えます。 @cindex ? @node voigt, cerf, tanh, 関数_(Functions) @subsubsection voigt @c ?expressions functions voigt @cindex voigt @findex voigt 関数 `voigt(x,y)` は、スペクトル解析で使用される Voigt/Faddeeva 関数の 近似を返します。その誤差は 1/10^4 以内です。libcerf ライブラリが利用可 能ならば、より正確な値を求めるために re_w_of_z() ルーチンが使われます。 voigt(x,y) = real(faddeeva( x + y*@{0,1@} )) に注意してください。 @cindex ? @c ^ @node cerf, cdawson, voigt, 関数_(Functions) @subsubsection cerf @c ?expressions functions cerf @cindex cerf @findex cerf `cerf(z)` は誤差関数 erf(x) の複素バージョンです。 外部ライブラリ libcerf が必要です。 @node cdawson, faddeeva, cerf, 関数_(Functions) @subsubsection cdawson @c ?expressions functions cdawson @cindex cdawson @findex cdawson @cindex Dawson's integral @c ?Dawson's integral `cdawson(z)` は複素引数に対する Dawson 積分の値を返します。 cdawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z) 外部ライブラリ libcerf が必要です。 @node faddeeva, erfi, cdawson, 関数_(Functions) @subsubsection faddeeva @c ?expressions functions faddeeva @cindex faddeeva @findex faddeeva `faddeeva(z)` はスケール化複素相補誤差関数です。 faddeeva(z) = exp(-z^2) * erfc(-i*z) これは、Abramowitz-Stegun の式 7.1.3, 7.1.4 に対応します。 外部ライブラリ libcerf が必要です。 @node erfi, Voigt_Profile, faddeeva, 関数_(Functions) @subsubsection erfi @c ?expressions functions erfi @cindex erfi @findex erfi 虚誤差関数 erfi(x) = -i * erf(ix) 外部ライブラリ libcerf が必要です。 @cindex ? @cindex ? @node Voigt_Profile, gprintf, erfi, 関数_(Functions) @subsubsection Voigt Profile @c ?expressions functions VP @c ?expressions functions VP_fwhm @cindex VP @cindex VP_fwhm `VP(x,sigma,gamma)` はガウス密度関数 G(x;sigma) とローレンツ密度関数 L(x;gamma) の畳み込みで定義される Voigt プロファイル (密度関数) に対 応します。 `VP_fwhm(sigma,gamma)` は、この関数の半値全幅 (FWHM) を与えます。 @c ^ @c ^ @node gprintf, sprintf, Voigt_Profile, 関数_(Functions) @subsubsection gprintf @c ?expressions functions gprintf `gprintf("format",x)` は、gnuplot 独自の書式指定子に一つの変数 x を適 用し、その結果の文字列を返します。標準的な C 言語書式指定子を使いたい 場合は、代わりに `sprintf("format",x)` を使う必要があります。 以下参照: `format specifiers`。 @node sprintf, strlen, gprintf, 関数_(Functions) @subsubsection sprintf @c ?expressions functions sprintf @cindex sprintf @findex sprintf `sprintf("format",var1,var2,...)` は標準的な C 言語の書式指定子を複数 個の引数に適用し、その結果の文字列を返します。gnuplot 独自の書式指定子 を使いたい場合は、代わりに `gprintf()` を使用する必要があります。 sprintf の書式指定子に関するより詳しい情報については、標準的な C 言語 の本か、unix の sprintf の man ページを参照してください。 @node strlen, strstrt, sprintf, 関数_(Functions) @subsubsection strlen @c ?expressions functions strlen @cindex strlen @findex strlen `strlen("string")` は、現在のエンコーディングを考慮した、文字列中の文 字数を返します。現在のエンコーディングが多バイト文字 (SJIS UTF8) をサ ポートしていれば、この値は、文字列のバイト数よりも小さくなるでしょう。 文字列に多バイト UTF8 文字が含まれていて、しかし現在のエンコーディング が UTF8 以外の別のものに設定されていると、strlen("utf8文字列") は、 実際の文字数よりも大きな値を返すでしょう。 @node strstrt, substr, strlen, 関数_(Functions) @subsubsection strstrt @c ?expressions functions strstrt @cindex strstrt @findex strstrt `strstrt("string","key")` は、文字列 "key" を "string" の中で探し、そ れが現れる先頭位置を返します。"key" が見つからなかった場合は 0 を返し ます。C ライブラリの strstr 関数に似ていますが、文字列へのポインタを返 す strstr とは違い、これは整数での位置を返します。例えば、 strstrt("hayneedlestack","needle") = 4 となります。 この関数は、UTF-8 エンコーディング認識しますので、strstr("αβγ","β") は 2 を返します (訳注: UTF-8 エンコーディングで与えた場合)。 @node substr, split, strstrt, 関数_(Functions) @subsubsection substr @c ?expressions functions substr @cindex substr @findex substr @cindex substring `substr("string",beg,end)` は、元の文字列の beg から end 番目までの文 字からなる文字列を返します。これは、"string"[beg:end] という式とほぼ同 じですが、こちらはオプション beg, end を省略できません。 @node split, join, substr, 関数_(Functions) @subsubsection split @c ? `split("string", "sep")` は、"sep" 内の文字をフィールドの区切りとして 使用し、文字列 "string" の中身を個々のフィールドに切り分けます。これは、 その要素が元の文字列のフィールドにそれぞれ対応する文字列の配列を返しま す。2 つ目のパラメータ "sep" はオプションで、"sep" を省略した場合、ま たは空白文字一つである場合は、フィールド文字列を任意個のホワイトスペー ス (スペース、タブ、改ページ、改行、復帰) で切り分けます。それ以外の場 合は、区切りは "sep" 内の完全な文字列にマッチする必要があります。 例えば、以下参照: `counting_words`。 @node join, strftime, split, 関数_(Functions) @subsubsection join @c ? `join(array, "sep")` は、配列の文字列要素を、"sep" の文字列で区切られ たフィールドの列として一つの文字列に連結します。文字列でない配列要素は、 空のフィールドを生成します。 例えば、以下参照: `counting_words`。 @node strftime, strptime, join, 関数_(Functions) @subsubsection strftime @c ?expressions functions strftime @cindex strftime @findex strftime `strftime("timeformat",t)` は、1970 年からの秒数による時刻 t に、時刻 書式指定 timeformat を適用します。 以下参照: `time_specifiers`, @ref{strptime}。 @node strptime, system, strftime, 関数_(Functions) @subsubsection strptime @c ?expressions functions strptime @cindex strptime @findex strptime `strptime("timeformat",s)` 書式指定 timeformat を使って文字列 s から時 刻を読み込んで、それを 1970 年からの秒数に変換します。 以下参照: `time_specifiers`, @ref{strftime}。 @node system, trim, strptime, 関数_(Functions) @subsubsection system @c ?expressions functions system @cindex system @cmindex system `system("command")` は、標準的なシェルを用いて "command" を実行し、そ の標準出力への文字列を文字列変数として返します。一番最後の改行一つは無 視されます。 これは、'f(x) = real(system(sprintf("somecommand %f", x)))' のようにし て、外部関数の出力を gnuplot スクリプト内に取り込むのに利用できます。 @node trim, word, system, 関数_(Functions) @subsubsection trim @cindex trim @findex trim @c ?expressions functions trim `trim(" padded string ")` は、元々の文字列の前後につくホワイトスペー スを取り除いた文字列を返します。これは、入力データ列の、余計な空白を含 みうる文字列を比較する際に有用です。例: @example plot FOO using 1:( trim(strcol(3)) eq "A" ? $2 : NaN ) @end example @node word, words, trim, 関数_(Functions) @subsubsection word @c ? @cindex word @findex word `word("string",n)` は文字列 string の n 番目の単語文字列を返します。例 えば `word("one two three",2)` は文字列 "two" を返します。 @node words, exists, word, 関数_(Functions) @subsubsection words @cindex words @findex words `words("string")` は文字列 string 中の単語数を返します。例えば `words(" a b c d")` は 4 を返します。 @c ^ @cindex ? @cindex ? @cindex ? @c ?expressions functions tm_hour @cindex tm_hour 関数 `tm_hour(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが 時刻の何時 (0--23 の範囲の整数) であるかを、実数として返します。 @cindex ? @c ?expressions functions tm_mday @cindex tm_mday 関数 `tm_mday(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが その月の何日 (1--31 の範囲の整数) であるかを、実数として返します。 @cindex ? @c ?expressions functions tm_min @cindex tm_min 関数 `tm_min(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが 時刻の何分 (0--59 の範囲の整数) であるかを、実数として返します。 @cindex ? @c ?expressions functions tm_mon @cindex tm_mon 関数 `tm_mon(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが 何月 (0--11 の範囲の整数) であるかを、実数として返します。 @cindex ? @c ?expressions functions tm_sec @cindex tm_sec 関数 `tm_sec(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが 時刻の何秒 (0--59 の範囲の整数) であるかを、実数として返します。 @cindex ? @c ?expressions functions tm_wday @cindex tm_wday 関数 `tm_wday(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが 何曜日であるかを、日曜から土曜を 0 から 6 の整数として返します。 @cindex ? @cindex ? @c ?expressions functions tm_yday @cindex tm_yday 関数 `tm_yday(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが その年の何日目 (0--365 の範囲の整数) であるかを、実数として返します。 @cindex ? @c ?expressions functions tm_year @cindex tm_year 関数 `tm_year(t)` は引数を 1970 年 1 月 1 日からの秒数と解釈し、それが 西暦何年 (整数) であるかを、実数として返します。 @cindex ? @cindex ? @c ^ @cindex ? @cindex ? @cindex ? @node exists, hsv2rgb, words, 関数_(Functions) @subsubsection exists @c ?expressions functions exists @cindex exists @findex exists `exists()` の引数は文字列定数、または文字列変数です。その文字列が、定 義されている変数名を持っていれば 1 を、そうでなければ 0 を返します。 @node hsv2rgb, palette, exists, 関数_(Functions) @subsubsection hsv2rgb @c ?expressions functions hsv2rgb @cindex hsv2rgb @findex hsv2rgb @cindex hsv 関数 `hsv2rgb(h,s,v)` は、HSV (色相(Hue)/彩度(Saturation)/明度(Value)) の 3 つ組をそれと同等な RGB 値に変換します。 @cindex ? @node palette, rgbcolor, hsv2rgb, 関数_(Functions) @subsubsection palette @c ?expressions functions palette @cindex palette @findex palette `palette(z)` は cbrange の現在の範囲で z に割り当てられるパレット色の 24 ビット RGB 表現を返します。 @node rgbcolor, voxel, palette, 関数_(Functions) @subsubsection rgbcolor @c ?expressions functions rgbcolor @cindex rgbcolor @findex rgbcolor @cindex alpha channel `rgbcolor("name")` は、色名か、"0xAARRGGBB" や "#AARRGGBB" の形式の文 字列に対する、アルファ値 + RGB 色表現の 32 ビット整数値を返します。文 字列が色の表現であると認識されなければ、この関数は 0 を返します。これ を使えば、データファイルから色名を読んだり、色名の色にアルファ値を上位 バイトに追加した値を返り値として得たりできます。以下参照: `colorspec`。 @cindex ? @cindex ? @cindex ? @node voxel, 整数変換関数_(int_floor_ceil_round)_(integer_conversion_functions), rgbcolor, 関数_(Functions) @subsubsection voxel @c ?expressions functions voxel @cindex voxel @findex voxel 関数 voxel(x,y,z) は、現在有効な格子の、点 (x,y,z) を含むボクセルの値 を返します。これは、代入式の左辺に置いて、ボクセルの値を設定するのにも 使えます。例: voxel(x,y,z) = 0.0 以下参照: `splot voxel-grids`, @ref{vgrid}。 @node 整数変換関数_(int_floor_ceil_round)_(integer_conversion_functions), 種々の楕円積分_(elliptic_integrals), voxel, 関数_(Functions) @subsubsection 整数変換関数 (int floor ceil round) (integer conversion functions) @c ?integer conversion @cindex integer @cindex precision gnuplot の整数変数値は、使用環境が許せば、64 ビットの精度で保存します。 gnuplot の複素数変数値、実数変数値は、ほとんどの使用環境で IEEE754 の binary64 (double) 浮動小数形式で保存します。その精度は、53 ビットに制 限され、有効数字はおよそ 16 桁です。 よって、絶対値が 2^53 よりも大きい整数は、浮動小数変数で一意に表現する ことはできません。つまり、大きな N に対する int(real(N)) という操作は N に近いけれども N とは異なる整数を返す可能性があります。 さらに、浮動小数値を切り捨てにより整数値に変換する関数は、その値自身が 小さくても、16 桁以上の精度に依存する操作では期待する値を得られない可 能性があります。例えば、int(log10(0.1)) は、-1 でなく 0 を返しますが、 それはその浮動小数表現が -0.999999999999999... に等しいからです。 以下も参照: @ref{overflow}。 @c ?expressions functions int @cindex int `int(x)` は、引数の 0 の方向に切り捨てた整数部分を返します。 |x| > 2^63、すなわち整数値として大きすぎる場合は NaN を返します。 |x| > 2^52 の場合は、返り値はある整数の近傍におさまりますが、浮動小数 精度の制限のためにそれらを区別できません。 以下参照: `integer conversion`。 @c ?expressions functions floor @cindex floor `floor(x)` は、x の実数部分以下の最大の整数を返します。 |x| > 2^52 の場合、その値は一意に決定できませんので、その場合は NaN を 返します。以下参照: `integer conversion`。 @c ?expressions functions ceil @cindex ceil `ceil(x)` は、x の実数部分以上の最小の整数を返します。 |x| > 2^52 の場合、その値は一意に決定できませんので、その場合は NaN を 返します。以下参照: `integer conversion`。 @c ?expressions functions round @cindex round `round(x)` は、x の実数部分に一番近い整数を返します。 |x| > 2^52 の場合、その値は一意に決定できませんので、その場合は NaN を 返します。以下参照: `integer conversion`。 @node 種々の楕円積分_(elliptic_integrals), 複素エアリー関数__(Complex_Airy_functions), 整数変換関数_(int_floor_ceil_round)_(integer_conversion_functions), 関数_(Functions) @subsubsection 種々の楕円積分 (elliptic integrals) @c ?elliptic integrals @cindex elliptic @cindex elliptic integrals 関数 `EllipticK(k)` は、第 1 種完全楕円積分、すなわち、関数 `(1 - k^2*sin^2(θ))^(-0.5)` の 0 からπ/2 までの範囲の広義積分の値を 返します。`k` の定義域は -1 から 1 です (両端は含まない)。 関数 `EllipticE(k)` は、第 2 種完全楕円積分、すなわち、関数 `(1 - k^2*sin^2(θ))^(-0.5)` の 0 からπ/2 までの範囲の広義積分の値を 返します。`k` の定義域は -1 から 1 です (両端も含む)。 関数 `EllipticPi(n,k)` は、第 3 種完全楕円積分、すなわち関数 `(1 - k^2*sin^2(θ))^(-0.5) / (1 - n*sin^2(θ))` の 0 からπ/2 までの 範囲の広義積分の値を返します。パラメータ `n` は 1 より小さく、`k` は -1 と 1 の間 (両端は含まない) でなければいけません。定義より、すべての 正の `k` に対し EllipticPi(0,k) == EllipticK(k) であることに注意してく ださい。 楕円積分のアルゴリズム: B.C.Carlson 1995, Numerical Algorithms 10:13-26. @node 複素エアリー関数__(Complex_Airy_functions), 複素ベッセル関数_(Complex_Bessel_functions), 種々の楕円積分_(elliptic_integrals), 関数_(Functions) @subsubsection 複素エアリー関数 (Complex Airy functions) @c ?expressions functions Ai @cindex Ai @c ?expressions functions Bi @cindex Bi `Ai(z)` と `Bi(z)` は、複素引数 z のエアリー関数で、変形ベッセル関数 K と I を用いて計算されます。 Donald E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によ るルーチンを含む外部ライブラリによってサポートしています。 @node 複素ベッセル関数_(Complex_Bessel_functions), Expint, 複素エアリー関数__(Complex_Airy_functions), 関数_(Functions) @subsubsection 複素ベッセル関数 (Complex Bessel functions) @c ?expressions functions BesselJ @cindex BesselJ `BesselJ(nu,z)` は、実引数の nu と複素引数の z に対する第 1 種ベッセル 関数 J_nu です。 Donald E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によ るルーチンを含む外部ライブラリによってサポートしています。 @c ?expressions functions BesselY @cindex BesselY `BesselY(nu,z)` は、実引数の nu と複素引数の z に対する第 2 種ベッセル 関数 Y_nu です。 Donald E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によ るルーチンを含む外部ライブラリによってサポートしています。 @c ?expressions functions BesselI @cindex BesselI `BesselI(nu,z)` は、実引数の nu と複素引数の z に対する第 1 種変形ベッ セル関数 I_nu です。 Donald E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によ るルーチンを含む外部ライブラリによってサポートしています。 @c ?expressions functions BesselK @cindex BesselK `BesselK(nu,z)` は、実引数の nu と複素引数の z に対する第 2 種変形ベッ セル関数 K_nu です。 Donald E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によ るルーチンを含む外部ライブラリによってサポートしています。 @c ?expressions functions BesselH1 @c ?expressions functions BesselH2 @c ?expressions functions Hankel @cindex BesselH1 @cindex BesselH2 @cindex Hankel `BesselH1(nu,z)` と `BesselH2(nu,z)` は、それぞれ実引数の nu と複素引 数の z に対する第 1 種、第 2 種のハンケル関数です。 @example H1(nu,z) = J(nu,z) + iY(nu,z) H2(nu,z) = J(nu,z) - iY(nu,z) @end example Donald E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によ るルーチンを含む外部ライブラリによってサポートしています。 @node Expint, フレネル積分_(Fresnel_integrals_FresnelC(x)_and_FresnelS(x)), 複素ベッセル関数_(Complex_Bessel_functions), 関数_(Functions) @subsubsection Expint @c ?expressions functions expint @cindex expint `expint(n,z)` は、0 以上の整数 n に対して、次数 n の指数積分を返します。 これは、t^(-n) e^(-tz) dt の 1 から∞までの積分値です。 あなたが使っている gnuplot が、Amos ライブラリによる複素関数のサポート 付きでビルドされたものであれば、n>0 に対して、その評価には Amos ルーチ ンの cexint を使用します [Amos 1990 Algorithm 683, ACM Trans Math Software 16:178]。その場合、z は -pi < arg(z) <= pi の任意の複素数とで きます。expint(0,z) は、exp(-z)/z と計算します。 Amos ライブラリのサポートがなければ、z は 0 以上の実数値に制限されます。 @node フレネル積分_(Fresnel_integrals_FresnelC(x)_and_FresnelS(x)), Gamma, Expint, 関数_(Functions) @subsubsection フレネル積分 (Fresnel integrals FresnelC(x) and FresnelS(x)) @c ?expressions functions FresnelC @c ?expressions functions FresnelS @cindex FresnelC @cindex FresnelS コサインとサインのフレネル積分は、複素誤差関数 erf(z) との関係を用いて 計算します。erf(z) に依存するため、これらの積分は libcerf ライブラリの サポートがある場合にのみ利用できます。 @node Gamma, Igamma, フレネル積分_(Fresnel_integrals_FresnelC(x)_and_FresnelS(x)), 関数_(Functions) @subsubsection Gamma @cindex gamma @findex gamma `gamma(x)` は、その引数の実数部分のガンマ関数値を返します。整数 n に対 しては gamma(n+1) = n! です。引数が複素数の場合、その虚数部分は無視し ます。複素数引数に対しては、以下参照: @ref{lnGamma}。 @node Igamma, Invigamma, Gamma, 関数_(Functions) @subsubsection Igamma @c ?expressions functions igamma @cindex igamma `igamma(a, z)` は、下方 (正規化) 不完全ガンマ関数 P(a, z) を返します @example [Abramowitz and Stegun (6.5.1); NIST DLMF 8.2.4]。複素関数サポートが @end example あれば、a と z は real(a) > 0 の複素数値も許されます。 逆に、上方不完全ガンマ関数に関しては、以下参照: @ref{uigamma}。 a, z の値に依存して、以下の 4 つのアルゴリズムを使用します。 ケース (1) a が大きく (>100) (z-a)/a が小さい (<0.2) 場合、 Numerical Recipes 第 3 版 6.2 節 (2007) にある係数での Gauss-Legendre 数値積分公式を利用します。 ケース (2) z > 1 で z > (a+2) の場合、Shea (1988) J. Royal Stat. Soc. Series C (Applied Statistics) 37:466-473 の連分数を利用します。 ケース (3) z < 0 で a < 75 で imag(a) == 0 の場合は、Abramowitz & Stegun (6.5.29) の数列を利用します。 ケース (4) その他の場合は、Peason の級数展開を利用します。 全平面では、ある領域でその収束は良くないことに注意してください。選択し たアルゴリズムで 1.E-14 の範囲で収束しなければ、関数は NaN を返し、警 告を表示します。 複素関数サポートがない場合は、定義域は実数の引数の a > 0, z >= 0 に制 限されます。 @node Invigamma, Ibeta, Igamma, 関数_(Functions) @subsubsection Invigamma @c ?expressions functions invigamma @cindex invigamma 逆不完全ガンマ関数 `invigamma(a,p)` は、p = igamma(a,z) となる z の値 を返します。p は (0;1] に制限され、a は正の実数でなければいけません。 gnuplot での実装は、a<1 に対する 1.e-16 から、a = 1.e10 に対する 5.e-6 までの相対精度を持ちます。 @node Ibeta, Invibeta, Invigamma, 関数_(Functions) @subsubsection Ibeta @c ?expressions functions ibeta @cindex ibeta `ibeta(a,b,x)` は、実数引数 a,b > 0, [0;1] 内の x に対する、正規化下方 不完全ベータ積分値を返します。 引数が複素数の場合、虚数部分は無視します。gnuplot での実装は、Cephes ライブラリ [Moshier 1989, "Methods and Programs for Mathematical Functions", Prentice-Hall] からのコードを利用しています。 @node Invibeta, LambertW, Ibeta, 関数_(Functions) @subsubsection Invibeta @c ?expressions functions invibeta @cindex invibeta 逆不完全ベータ関数 `invibeta(a,b,p)` は、p = ibeta(a,b,z) となる z の 値を返します。a, b は正の実数に、p は [0,1] 内の値に制限されています。 a, b が 0 に近づくとき invibeta() は 1.0 に近づくので、その相対精度は浮動小数精度に制限される ことに注意してください。 @node LambertW, lnGamma, Invibeta, 関数_(Functions) @subsubsection LambertW @c ?expressions functions LambertW @cindex LambertW @findex LambertW 複素定義域と複素値域を持つ Lambert W 関数です。 LambertW( z, k ) は、方程式 W(z) * exp(W(z)) = z で定義される 関数 W の第 k 分岐を返します。 その複素数値は、Corless et al [1996], Adv. Comp. Math 5:329 に記載され ている Halley の方法を使って求めます。 名目上の精度は 1.E-13 ですが、不連続、すなわち分岐点の近くでは収束は良 くありません。 @node lnGamma, 乱数の生成_(random), LambertW, 関数_(Functions) @subsubsection lnGamma @c ?expressions functions lnGamma @cindex lnGamma @findex lnGamma lnGamma(z) は、複素定義域と複素値域を持つ、ガンマ関数の自然対数値を返 します。 Lanczos [1964], SIAM JNA 1:86-96 による 14 項近似による実装で す。結果の虚数成分は、負の実軸部分を除く全体で連続な曲面を生成するよう 位相をずらしています。 @node 乱数の生成_(random), 複素引数の特殊関数_(Special_functions_with_complex_arguments), lnGamma, 関数_(Functions) @subsubsection 乱数の生成 (random) @c ?expressions random @cindex random @cindex rand @findex rand 関数 `rand()` は 0 と 1 の間の疑似乱数列を生成します。これは以下からの アルゴリズムを使用しています: P. L'Ecuyer and S. Cote, "Implementing a random number package with splitting facilities", ACM Transactions on Mathematical Software, 17:98-111 (1991). @example rand(0) 内部に持つ 2 つの 32bit の種 (seed) の現在の値から生 成される開区間 (0:1) 内の疑似乱数値を返す rand(-1) 2 つの種の値を標準値に戻す rand(x) 0 < x < 2^31-1 の整数なら種の両方を x に設定する rand(@{x,y@}) 0 < x,y < 2^31-1 の整数なら seed1 を x に seed2 を y に設定する @end example @node 複素引数の特殊関数_(Special_functions_with_complex_arguments), Synchrotron_function, 乱数の生成_(random), 関数_(Functions) @subsubsection 複素引数の特殊関数 (Special functions with complex arguments) @c ?expressions functions special @c ?expressions functions complex @cindex special_functions @cindex libcerf @cindex Amos @cindex libopenspecfun 複素定義域を持ついくつかの特殊関数を、外部ライブラリを通して提供します。 あなたが使っている gnuplot がこれらのライブラリへのリンクなしでビルド されている場合は、定義域が実数の場合のみサポートするか、または関数自体 を全く提供しないかとなるでしょう。 libcerf (http://apps.jcns.fz-juelich.de/libcerf) を必要とする関数は、 ビルド時の設定オプション `--with-libcerf` に依存し、これがデフォルトで す。以下参照: @ref{cerf}, @ref{cdawson}, @ref{faddeeva}, @ref{erfi}, `VP`, `VP_fwhm`。 実数次 nu と複素引数の複素エアリー、ベッセル、ハンケル関数は、Douglas E. Amos, Sandia National Laboratories, SAND85-1018 (1985) によって実装 されたルーチンを含むライブラリを必要とします。これらのルーチンは、 netlib (http://netlib.sandia.gov) や、libopenspecfun (https://github.com/JuliaLang/openspecfun) にあります。これらに対応す るビルド時の設定オプションは `--with-amos=` です。 以下参照: `Ai`, `Bi`, `BesselJ`, `BesselY`, `BesselI`, `BesselK`, `Hankel`。 複素指数積分は、netlib, libamos では提供していますが、libopenspecfun にはありません。以下参照: `expint`。 @node Synchrotron_function, 時刻関数_(Time_functions), 複素引数の特殊関数_(Special_functions_with_complex_arguments), 関数_(Functions) @subsubsection Synchrotron function @c ?expressions functions SynchrotronF @cindex SynchrotronF (第 1) シンクロトロン関数 SynchrotronF(x) は、シンクロトロン放射のパワ ー分布スペクトルを、臨界フォトンエネルギー (臨界周波数 vc) の単位で与 える x の関数として記述するものです。 1.E-15 まで正確な近似の Chebyshev 係数は、MacLead (2000) NuclInstMethPhysRes A443:540-545 から採用しています。 @node 時刻関数_(Time_functions), uigamma, Synchrotron_function, 関数_(Functions) @subsubsection 時刻関数 (Time functions) @noindent --- TIME --- @c ?expressions functions time @cindex time 関数 `time(x)` は現在のシステム時刻を返します。この値は @ref{strftime} 関 数で日時文字列に変換できますし、`timecolumn` と組み合わせて相対的な日 時グラフを作成するのにも使えます。引数の型はそれが返すものを決定します。 引数が整数の場合は time() は現在の時刻を 1970 年 1 月 1 日からの整数と して返し、引数が実数 (または複素数) ならば同様の値を実数として返します。 引数が文字列ならば、それを書式文字列であるとみなし、書式化された日時文 字列を提供するようそれを @ref{strftime} に渡します。 以下参照: `time_specifiers`, `timefmt`。 @noindent --- TIMECOLUMN --- @c ?expressions functions timecolumn @cindex timecolumn `timecolumn(N,"timeformat")` は、N 列目から始まる文字列データを日時デ ータ値として読み、"timeformat" を使用して、それを "Unix エポック (1970 年 1 月 1 日) からの秒数" としてミリ秒精度で解釈します。書式パラメータ の指定がない場合、デフォルトの `set timefmt` による文字列を使います。 この関数は、plot か stats コマンドでの `using` 指定でのみ有効です。以 下参照: `plot datafile using`。 @noindent --- TM_STRUCTURE --- @cindex epoch gnuplot は、内部では時刻を、Unix エポック 1970 年 1 月 1 日からの秒数 を表す 64 bit の浮動小数値として保持しています。これを時刻や日付として 解釈するために、それを POSIX 標準の構造体 `struct_tm` に変換します。 1 秒未満の秒数は、どんな場合でも tm_sec() からは取得できないことに注意 してください。各要素には、以下の関数を利用して個別にアクセスできます。 @itemize @bullet @item `tm_hour(t)` 整数 0--23 の範囲の時間 @item `tm_mday(t)` 整数 1--31 の範囲のその月の日 @item `tm_min(t)` 整数 0--59 の範囲の分 @item `tm_mon(t)` 整数 0--11 の範囲のその年の月 @item `tm_sec(t)` 整数 0--59 の範囲の秒 @item `tm_wday(t)` 整数 0(日)-- 6(土) の範囲の曜日 @item `tm_yday(t)` 整数 0--365 の範囲のその年の日 @item `tm_year(t)` 整数 西暦 @end itemize @noindent --- TM_WEEK --- @c ?expressions functions tm_week @c ?time_specifiers tm_week @cindex tm_week @c ?epidemiological week @cindex epidemiological week 関数 `tm_week(t, standard)` は、その引数を 1970 年 1 月 1 日からの秒数 での時刻とみなします。なお、関数名から POSIX の tm 構造体のメンバと思 うかもしれませんが、そうではありません。 standard = 0 の場合、これは ISO 8601 週曜日規則での週番号を返します。 これは、gnuplot の時刻書式 %W に対応します。 standard = 1 の場合、これは CDC (アメリカ疾病予防管理センター) 疫学的 週曜日規則 (「疫学的週」) での週番号を返します。 これは、gnuplot の時刻書式 %U に対応します。 これらに対応する、週曜日からカレンダー時刻に変換する逆関数については、 以下参照: `weekdate_iso`, `weekdate_cdc`。 解説: ISO の YYYY 年の 1 番の週は、YYYY 年 1 月 1 に一番近い月曜日から 始まります。これは、前の年になる可能性もあります。例えば、2008 年 12 月 30 日火曜日は、ISO の週曜日では 2009-W01-2 (2009 年の週番号 1 の第 2 日) となります。逆に、1 月の 1 日から 3 日までは、ISO の週番号 1 の 月曜より前になることがありえます。この場合、これらの日は、前の年の最後 の週番号の週に含まれることになります。例えば、2021 年 1 月 1 日金曜日 は、ISO の週曜日では 2020-W53-5 です。 アメリカ疾病予防管理センター (CDC) の定める疫学的週は、同様の週曜日規 則ですが、ISO 規則とは、月曜開始ではなく、日曜開始であるところが違いま す。 @noindent --- WEEKDATE_ISO --- @c ?expressions functions weekdate_iso @c ?time_specifiers weekdate_iso @cindex weekdate_iso 書式: @example time = weekdate_iso( year, week [, day] ) @end example この関数は、ISO 8601 週曜日での year(西暦), week(週番号), day(日番号) の要素を、Unix エポックの 1970 年 1 月 1 日からの秒数でのカレンダー時 刻に変換します。週曜日系での名目上の年 (year) は、カレンダーでの年と必 ずしも一致しないことに注意してください。週番号 week は 1 から 53 の間 の整数です。日番号 day はオプションで、それが 0 かまたは省略した場合は その週の開始時刻を返し、そうでなければ day は 1 (月曜) から 7 (日曜) までの整数です。 カレンダー日を、ISO 規則での週番号に変換する逆関数に関する情報について は、以下参照: `tm_week`。 例: @example # 1 列目に ISO 週番号を持つファイルからのデータの描画 # 週 感染者 死亡者 # 2020-05 432 1 calendar_date(w) = weekdate_iso( int(w[1:4]), int(w[6:7]) ) set xtics time format "%b\n%Y" plot FILE using (calendar_date(strcol(1))) : 2 title columnhead @end example @noindent --- WEEKDATE_CDC --- @c ?expressions functions weekdate_cdc @c ?time_specifiers weekdate_cdc @cindex weekdate_cdc @cindex epidemiological week 書式: @example time = weekdate_cdc( year, week [, day] ) @end example この関数は、CDC/MMWR (アメリカ疾病予防管理センター/疫学週報) の疫学的 週曜日での year(西暦), week(週番号), day(日番号) の要素を、Unix エポッ クの 1970 年 1 月 1 日からの秒数でのカレンダー時刻に変換します。CDC 週 曜日規則は、ISO 規則とは、週が 1 = 日曜から 7 = 土曜まで、と定義されて いる点に違いがあります。3 番目のパラメータが 0 または省略した場合は、 その週の開始時刻が返ります。 以下参照: `tm_week`, `weekdate_iso`。 @node uigamma, using_指定用関数_(using_specifier_functions), 時刻関数_(Time_functions), 関数_(Functions) @subsubsection uigamma @c ?expressions functions uigamma @cindex uigamma @findex uigamma `uigamma(a, x)` は、上方 (正規化) 不完全ガンマ関数 Q(a, x) を返します [NIST DLMF eq 8.2.4]。 逆に、下方不完全ガンマ関数 P(a,x) に対しては、以下参照: `igamma`。 Q(a, x) + P(a, x) = 1 です。 現在の実装は、Cephes library (Moshier 2000) によるものです。定義域は、 実数の a>0, 実数の x>=0 に制限されています。 試験段階: そのうちに複素引数を処理する実装に置き換えられるでしょう。 @cindex ? @node using_指定用関数_(using_specifier_functions), value, uigamma, 関数_(Functions) @subsubsection using 指定用関数 (using specifier functions) 以下の関数は、データ入力時のみ有効です。通常それは、`plot`, `splot`, `fit`, `stats` のいずれかのコマンド上の `using` 指定の入力列を使用する 数式内で使用します。しかしその関数の適用範囲は、実際の plot コマンド文 全体であり、例えばグラフタイトルの作成時の `columnhead` の使用も含まれ ます。 @noindent --- COLUMN --- @c ?expressions functions column @cindex column 関数 `column(x)` は、plot, splot, stats コマンドの一部としてのみ使いま す。これは、$x$ 列目の内容を数値として評価します。 文字列を持つと思われる列の場合は、代わりに stringcolumn(x) か、 timecolumn(x, "timeformat") を使用してください。 以下参照: `plot datafile using`, `stringcolumn`, `timecolumn`。 @noindent --- COLUMNHEAD --- @c ?expressions functions columnhead @cindex columnhead 関数 `columnhead(x)` は、plot, splot, stats コマンドの一部としてのみ使 います。これは、データファイルの最初の行の $x$ 列目の内容を文字列とし て評価します。典型的には、これは先頭行をグラフタイトルとして展開するの に使用します。 以下参照: `plot datafile using`。 例: @example set datafile columnheader plot for [i=2:4] DATA using 1:i title columnhead(i) @end example @noindent --- STRINGCOLUMN --- @c ?expressions functions stringcolumn @cindex stringcolumn @c ?expressions functions strcol @cindex strcol 関数 `stringcolumn(x)` は、データ描画か fit における `using` 指定での み使います。これは $x$ 列目の内容を文字列として返します。`strcol(x)` は、`stringcolumn(x)` の省略形です。 その文字列を、時間や日付と認識させたい場合は、代わりに timecolumn(x, "timeformat") を使用してください。以下参照: `plot datafile using`。 @noindent --- VALID --- @c ?expressions functions valid @cindex valid 関数 `valid(x)` は、データ描画か fit における `using` 指定の式の中でし か使いません。これは、明らかな NaN 値や、入力列内の予期せぬゴミを検出 したり、多分デフォルト値に置き換えたり、NaN を使ってさらに計算をするこ とを避けたりするのに使えます。欠損値 ("missing") と NaN (非数値) デー タ値はどちらも不正と認識されますが、以下は重要ですが、gnuplot がその列 を本当に欠損値であると認識するか、または欠損値フラグを含んでいると認識 した場合、valid() を使用する数式が呼び出される前に、その入力行は捨てら れてしまう、ということに注意してください。 以下参照: `plot datafile using`, `missing`。 例: @example # 箱のある認識できない値を、無視する代わりに、期待値である定数 # prior として、箱全体に寄与するように扱う。 plot DATA using 1 : (valid(2) ? $2 : prior) smooth unique @end example @node value, 単語の取り出しと単語数_(word, using_指定用関数_(using_specifier_functions), 関数_(Functions) @subsubsection value @c ?expressions functions value @cindex value @findex value A がユーザー定義変数の名前であれば、B = value("A") は事実上 B = A と全 く同じです。これは、変数の名前自身が文字列変数に収められている場合に有 用です。以下参照: `user-defined variables`。これは、変数名をデータファ イルから読み取ることも可能にします。引数が数式である場合、value() はそ の数式の値を返します。引数が文字列で、定義されている変数に対応するもの がない場合、value() は NaN を返します。 @node 単語の取り出しと単語数_(word, zeta, value, 関数_(Functions) @subsubsection 単語の取り出しと単語数 (word, words) @cindex counting_words @c ?expressions functions word @c ?expressions functions words @cindex words @findex words @cindex word @findex word `word("string",n)` は、文字列 (string) の n 番目の単語を返します。例え ば `word("one two three",2)` は文字列 "two" を返します。 `words("string")` は、文字列 (string) の単語数を返します。例えば、 `words(" a b c d")` は 4 を返します。 関数 `word` と @ref{words} は、単一引用符、二重引用符で囲まれた文字列も、 限定的ですがサポートしています: @example print words("\"double quotes\" or 'single quotes'") # 3 @end example 開始引用符の前は、スペースか、または文字列の先頭でなければいけません。 これは、単語内、あるいは単語終わりにつくアポストロフィー (') は、それ ぞれの単語の要素であると見なされることを意味します: @example print words("Alexis' phone doesn't work") # 4 @end example 引用符文字のエスケープはサポートしていませんので、ある引用符を維持した い場合は、それぞれを別の種類の引用符で囲まなければいけません: @example s = "Keep \"'single quotes'\" or '\"double quotes\"'" print word(s, 2) # 'single quotes' print word(s, 4) # "double quotes" @end example 最後の例では、引用符のエスケープが文字列の定義時のみに必要であることに 注意してください。 @cindex split @findex split @cindex split @findex split @c ?expressions functions split `split("string", "sep")` は、 `split("string", "sep")` は、"sep" 内の文字をフィールドの区切りとして 使用し、文字列 "string" の中身を個々のフィールドに切り分けます。これは、 その要素が元の文字列のフィールドにそれぞれ対応する文字列の配列を返しま す。2 つ目のパラメータ "sep" はオプションで、"sep" を省略した場合、ま たは空白文字一つである場合は、フィールド文字列を任意個のホワイトスペー ス (スペース、タブ、改ページ、改行、復帰) で切り分けます。それ以外の場 合は、区切りは "sep" 内の完全な文字列にマッチする必要があります。 以下の 3 つの例は、いずれも配列 [ "A", "B", "C", "D" ] を生成します。 @example t1 = split( "A B C D" ) t2 = split( "A B C D", " ") t3 = split( "A;B;C;D", ";") @end example しかし、以下のコマンド @example t4 = split( "A;B; C;D", "; " ) @end example は、2 つの文字列のみを持つ配列 [ "A;B", "C;D" ] を生成しますが、それは、 2 文字のフィールド区切り文字列 "; " が 1 つしか見つからないからです。 注意: 文字列を、1 文字ずつの配列に保存するために、区切りとして空文字を 設定することは、現在は実装されていません。それは、代わりに 1 文字の部 分文字列を使うことで実現できます: Array[i] = "string"[i:i] @cindex join @findex join @cindex join @findex join @c ?expressions functions join `join(array, "sep")` は、配列の文字列要素を、"sep" の文字列で区切られ たフィールドの列として一つの文字列に連結します。文字列でない配列要素は、 空のフィールドを生成します。この逆に @ref{split} 関数は一つの文字列を複数 のフィールドに切り分けて一つの配列を生成します。 例: @example array A = ["A", "B", , 7, "E"] print join(A,";") A;B;;;E @end example @cindex trim @findex trim @cindex trim @findex trim `trim(" padded string ")` は、元の文字列の前後にある空白部分を取り除 いた文字列を返します。これは、余計な空白を持ちうる入力データ列の文字列 同士を比較する際に有用です。例: @example plot FOO using 1:( trim(strcol(3)) eq "A" ? $2 : NaN ) @end example @node zeta, , 単語の取り出しと単語数_(word, 関数_(Functions) @subsubsection zeta @c ?expressions functions zeta @cindex zeta @findex zeta @cindex Riemann zeta(s) は、複素変数、複素数値のリーマンゼータ関数です。 この実装は、P. Borwein [2000] Canadian Mathematical Society Conference Proceedings でアルゴリズム 3 として記述されている多項式級数を使用して います。名目上の精度は、複素平面上で 1.e-16 です。しかし、これは、ゼー タ関数の自明でない零点が完全に 0 と評価されることを保証はしません。 @node 演算子_(operators), 和_(summation), 関数_(Functions), 式_(Expressions) @subsection 演算子 (operators) @c ?expressions operators @cindex operators `gnuplot` の演算子は、C 言語の演算子とほぼ同じですが、特に注意がなけれ ば全ての演算子が整数、実数、複素数の引数を取ることができます。また、 FORTRAN で使える ** (累乗) 演算子もサポートされています。 演算子の優先順位は Fortran や C と同じです。それらの言語同様、演算の評 価される順序を変えるためにかっこが使われます。よって -2**2 = -4 で、 (-2)**2 = 4 です。 @menu * 単項演算子_(Unary):: * 二項演算子_(Binary):: * 三項演算子_(Ternary):: @end menu @node 単項演算子_(Unary), 二項演算子_(Binary), 演算子_(operators), 演算子_(operators) @subsubsection 単項演算子 (Unary) @c ?expressions operators unary @c ?operators unary @cindex unary 以下は、単項演算子の一覧です: @example 記号 例 説明 - -a マイナス符号 + +a プラス符号 (何もしない) ~ ~a * 1 の補数 (ビット反転) ! !a * 論理的否定 ! a! * 階乗 $ $3 * `using` 指定上のデータ列 || |A| 配列 A の要素数 @end example @cindex factorial @cindex negation @cindex one's complement @cindex operator precedence @cindex cardinality @c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
記号 説明
- -a マイナス符号
+ +a プラス符号 (何もしない)
~ ~a * 1 の補数 (ビット反転)
! !a * 論理的否定
! a! * 階乗
$ $3 * `using` 指定上のデータ列
| |A| 配列 A の要素数
説明に星印 (*) のついた演算子の引数は整数でなければなりません。 階乗演算子は、N! が十分小さければ (64 ビット整数では N <= 20) 整数を返 し、大きな N の値に対しては実数での近似値を返します。 @cindex cardinality 基数オペレータ |...| は、配列 A の要素数 |A| を返します。データブロッ ク $DATA に適用した場合は、|$DATA| はデータ行数を返します。 @node 二項演算子_(Binary), 三項演算子_(Ternary), 単項演算子_(Unary), 演算子_(operators) @subsubsection 二項演算子 (Binary) @c ?expressions operators binary @c ?operators binary 以下は、二項演算子の一覧です: @example 記号 例 説明 ** a**b 累乗 * a*b 積 / a/b 商 % a%b * 余り + a+b 和 - a-b 差 == a==b 等しい != a!=b 等しくない < a a>b より大きい >= a>=b 以上 << 0xff<<1 符号なし左シフト >> 0xff>>2 符号なし右シフト & a&b * ビット積 (AND) ^ a^b * ビット排他論理和 (XOR) | a|b * ビット和 (OR) && a&&b * 論理的 AND || a||b * 論理的 OR = a = b 代入 , (a,b) 累次評価 . A.B 文字列の連結 eq A eq B 文字列が等しい ne A ne B 文字列が等しくない @end example @cindex bitwise operators @cindex string operators @cindex modulo @cindex exponentiation @c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
記号 説明
** a**b 累乗
* a*b
/ a/b
% a%b * 余り
+ a+b
- a-b
== a==b 等しい
!= a!=b 等しくない
< a<b より小さい
<= a<=b 以下
> a>b より大きい
>= a>=b 以上
<< 0xff<<1 符号なし左シフト
>> 0xff>>1 符号なし右シフト
& a&b * ビット積 (AND)
^ a^b * ビット排他的論理和 (XOR)
| a|b * ビット和 (OR)
&& a&&b * 論理的 AND
|| a||b * 論理的 OR
= a = b 代入
, (a,b) 累次評価
. a.b 文字列の連結
eq A eq B 文字列が等しい
ne A ne B 文字列が等しくない
説明に星印 (*) のついた演算子の引数は整数でなければなりません。 大文字の A,B は演算子が文字列引数を要求することを意味します。 論理演算子の AND (&&) と OR (||) は C 言語同様に必要最小限の評価しかし ません。すなわち、`&&` の第 2 引数は、第 1 引数が偽ならば評価されませ んし、`||` の第 2 引数は、第 1 引数が真ならば評価されません。 累次評価 (,) は、カッコの中でのみ評価され、左から右へ順に実行すること が保証され、最も右の式の値が返されます。 @node 三項演算子_(Ternary), , 二項演算子_(Binary), 演算子_(operators) @subsubsection 三項演算子 (Ternary) @c ?expressions operators ternary @c ?operators ternary @cindex ternary 一つだけ三項演算子があります: @example 記号 例 説明 ?: a?b:c 三項演算子 @end example @c ^ @c ^@c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^ @c ^
記号 説明
?: a?b:c * 三項演算子
三項演算子は C のものと同じ働きをします。最初の引数 (a) は整数でなけれ ばいけません。この値が評価され、それが真 (ゼロでない) ならば 2 番目の 引数 (b) が評価されその値が返され、そうでなければ 3 番目の引数 (c) が 評価され、その値が返されます。 三項演算子は、区分的に定義された関数や、ある条件が満たされた場合にのみ 点を描画する、といったことを行なう場合に有用です。 例: 0 <= x < 1 では sin(x) に、1 <= x < 2 では 1/x に等しくて、それ以外の x では定義されない関数を描画: @example f(x) = 0<=x && x<1 ? sin(x) : 1<=x && x<2 ? 1/x : 1/0 plot f(x) @end example `gnuplot` は描画時は未定義値に対しては何も表示せずにただ無視するので、 最後の場合の関数 (1/0) は点を全く出力しないことに注意してください。ま た、この関数描画の描画スタイルが lines (線描画) の場合、不連続点 (x=1) の所も連続関数として線が結ばれることにも注意してください。その点を不連 続になるようにするには、関数を 2 つの部分それぞれに分けてください。 ファイル 'file' のデータで、4 列目のデータが負でないときだけ、1 列目の データに関する 2 列目と 3 列目のデータの平均値を描画: @example plot 'file' using 1:( $4<0 ? 1/0 : ($2+$3)/2 ) @end example `using` の書式の説明に関しては、以下参照: `plot datafile using`。 @node 和_(summation), 定義済み変数_(Gnuplot-defined_variables), 演算子_(operators), 式_(Expressions) @subsection 和 (summation) @c ?expressions operators summation @c ?operators summation @cindex summation 和の式は、以下の形式で表します: @example sum [ = : ] @end example ここで は、 から までの整数値を順に取る整数変数とし て扱われます。その各値に対して、式 の値が合計値に追加され、 最終的な合計値がこの和の式の値となります。 例: @example print sum [i=1:10] i 55. # 以下は plot 'data' using 1:($2+$3+$4+$5+$6+...) と同等 plot 'data' using 1 : (sum [col=2:MAXCOL] column(col)) @end example は、必ずしも変数 を含む必要はありません。 は変数値や数式で指定もできますが、それらの値は動的に変更すること はできません。そうでないと副作用が起こり得ます。 より 小さい場合は、和の値は 0 となります。 @node 定義済み変数_(Gnuplot-defined_variables), ユーザ定義の変数と関数_(User-defined), 和_(summation), 式_(Expressions) @subsection 定義済み変数 (Gnuplot-defined variables) @c ?expressions gnuplot-defined @cindex gnuplot-defined @c ?gnuplot-defined variables @cindex GPVAL @cindex gpval gnuplot は、プログラムの現在の内部状態と直前の描画を反映するような読み 出し専用の変数をいくつか持っています。これらの変数の名前は、例えば GPVAL_TERM, GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN のように "GPVAL_" で 始まります。これらすべての一覧とその値を見るには、`show variables all` と入力してください。ただし、軸のパラメータに関連する値 (範囲、対数軸で あるか等) は、現在 `set` したものではなく、最後に描画されたものが使用 されます。 例: 点 [X,Y] のスクリーン比での座標を計算する方法 @example GRAPH_X = (X - GPVAL_X_MIN) / (GPVAL_X_MAX - GPVAL_X_MIN) GRAPH_Y = (Y - GPVAL_Y_MIN) / (GPVAL_Y_MAX - GPVAL_Y_MIN) SCREEN_X = GPVAL_TERM_XMIN + GRAPH_X * (GPVAL_TERM_XMAX - GPVAL_TERM_XMIN) SCREEN_Y = GPVAL_TERM_YMIN + GRAPH_Y * (GPVAL_TERM_YMAX - GPVAL_TERM_YMIN) FRAC_X = SCREEN_X * GPVAL_TERM_SCALE / GPVAL_TERM_XSIZE FRAC_Y = SCREEN_Y * GPVAL_TERM_SCALE / GPVAL_TERM_YSIZE @end example @cindex errors @cindex error state 読み出し専用変数 GPVAL_ERRNO は、任意の gnuplot コマンドがあるエラーの ために早く終わってしまった場合に 0 でない値にセットされ、直前のエラー メッセージは文字列変数 GPVAL_ERRMSG に保存されます。GPVAL_ERRNO と GPVAL_ERRMSG は、コマンド `reset errors` を使ってクリアできます。 `mouse` 機能が使える対話型入出力形式は、"MOUSE_" で始まる読み出し専用 変数をいくつか持っています。詳細は、以下参照: `mouse variables`。 `fit` 機能は、"FIT_" で始まるいくつかの変数を使用しますので、そのよう な名前を使うのは避けるべきでしょう。`set fit errorvariables` を使用す ると、各当てはめ変数のエラーは、そのパラメータ名に "_err" を追加した変 数に保存されます。詳細は、以下参照: `fit`。 以下も参照: `user-defined variables`, `reset errors`, `mouse variables`, `fit`。 @node ユーザ定義の変数と関数_(User-defined), 配列_(arrays), 定義済み変数_(Gnuplot-defined_variables), 式_(Expressions) @subsection ユーザ定義の変数と関数 (User-defined) @c ?expressions user-defined @c ?functions user-defined @c ?user-defined variables @cindex user-defined @cindex variables 新たなユーザ定義変数と 1 個から 12 個までの引数を持つユーザ定義関数を、 任意の場所で定義したり使ったりすることができます。それは `plot` コマン ド上でも可能です。 ユーザ定義関数書式: @example ( @{,@} ... @{,@} ) = @end example ここで は、仮変数 から で表される数式 です。この形式の関数定義は、1 行での使用に制限されています。より複雑で 複数行からなる関数は、関数ブロックの仕組みを使えば定義できます (現バー ジョンでの新機能)。以下参照: `function blocks`。 ユーザ定義変数書式: @example = @end example 例: @example w = 2 q = floor(tan(pi/2 - 0.1)) f(x) = sin(w*x) sinc(x) = sin(pi*x)/(pi*x) delta(t) = (t == 0) ramp(t) = (t > 0) ? t : 0 min(a,b) = (a < b) ? a : b comb(n,k) = n!/(k!*(n-k)!) len3d(x,y,z) = sqrt(x*x+y*y+z*z) plot f(x) = sin(x*a), a = 0.2, f(x), a = 0.4, f(x) @end example @example file = "mydata.inp" file(n) = sprintf("run_%d.dat",n) @end example 最後の 2 行の例は、ユーザ定義文字列変数と、ユーザ定義文字列関数を意味 しています。 @cindex NaN @cindex pi 変数 `pi` (3.14159...) と @ref{NaN} (IEEE 非数 ("Not a Number")) はあらか じめ定義されています。これらが必要なければ、他のものに再定義することも 可能ですし、以下のようにして元の値に復帰することもできます: @example NaN = GPVAL_NaN pi = GPVAL_pi @end example 他にもいくつかの変数が、例えば対話型入出力形式でのマウス操作や当てはめ (fit) などの gnuplot の動作状態に応じて定義されます。詳細は 以下参照: `gnuplot-defined variables`。 ある変数 V が既に定義されているかどうかは、式 exists("V") でチェックで きます。例: @example a = 10 if (exists("a")) print "a is defined" if (!exists("b")) print "b is not defined" @end example 変数名や関数名の命名規則は、大抵のプログラミング言語と同じで、先頭はア ルファベットで、その後の文字はアルファベット、数字、"_" が使えます。 各関数の定義式は、'GPFUN_' という接頭辞を持つ特別な文字列値変数として 利用できます。 例: @example set label GPFUN_sinc at graph .05,.95 @end example 以下参照: @ref{functions}, @ref{functions}, `gnuplot-defined variables`, `macros`, @ref{value}。 @node 配列_(arrays), , ユーザ定義の変数と関数_(User-defined), 式_(Expressions) @subsection 配列 (arrays) @cindex arrays @cindex cardinality 配列は、ユーザ変数の添字付きリストとして実装されています。一つの配列の 要素は、一つの変数型には限定されていません。配列は、参照する前に明示的 に作られていなければいけません。配列を作成した後で、そのサイズを変更す ることはできません。配列の要素は、宣言時に提供されてない限り、最初は未 定義 (undefined) です。ほとんどの場面で、名前付きユーザ変数の代わりに 配列要素を利用できます。 配列 A の要素数は、数式 |A| で取得できます。 例: @example array A[6] A[1] = 1 A[2] = 2.0 A[3] = @{3.0, 3.0@} A[4] = "four" A[6] = A[2]**3 array B[6] = [ 1, 2.0, A[3], "four", , B[2]**3 ] array C = split("A B C D E F") @end example @example do for [i=1:6] @{ print A[i], B[i] @} 1 1 2.0 2.0 @{3.0, 3.0@} @{3.0, 3.0@} four four 8.0 8.0 @end example 注意: 配列と変数は、同じ名前空間を共有します。例えば、あらかじめ FOO という名前の配列がある場合、FOO という名前の変数に文字列を割り当てると 配列を破壊します。 配列の名前を `plot`, `splot`, `fit`, `stats` コマンドに与えることもで きます。その場合、配列の添字がファイルの 1 列目の値で (1 から size ま で)、その値 A[i] の実数部分 real(A[i]) がファイルの 2 列目、虚数部分 imag(A[i]) がファイルの 3 列目であるようなデータファイルを与えたことと 同等になります。 例: @example array A[200] do for [i=1:200] @{ A[i] = sin(i * pi/100.) @} plot A title "sin(x) in centiradians" @end example ただし、plot 時に複素数値配列の虚数部分を描画したい場合、その値は imag(A[$1]) かまたは $3 として参照できます。よって以下の 2 つのコマン ドは同等です。 @example plot A using (real(A[$1])) : (imag(A[$1])) plot A using 2:3 @end example @menu * 配列関数_(array_functions):: * 配列の添字付け_(Array_indexing):: @end menu @node 配列関数_(array_functions), 配列の添字付け_(Array_indexing), 配列_(arrays), 配列_(arrays) @subsubsection 配列関数 (array functions) @c ?arrays functions @c ?arrays slice @cindex slice @cindex split @findex split gnuplot バージョン 6 より、配列を関数に渡すことも、返り値にすること もできるようになりました。例えば、2 つのサイズの同じ数値配列のドット積 (内積) は以下のように定義できます。 @example dot(A,B) = (|A| != |B|) ? NaN : sum [i=1:|A|] A[i] * B[i] @end example 配列をやりとりする組み込み関数には、配列の分割操作 array[min:max] や添 字取得関数 index(Array,value) があります。 @example T = split("A B C D E F") U = T[3:4] print T [ "A", "B", "C", "D", "E", "F" ] print U [ "C", "D" ] print index( T, "D" ) 4 @end example この例の T と U は、それが以前にどのように宣言されていたかどうかに関わ らず、この例の時点では配列になることに注意してください。 @node 配列の添字付け_(Array_indexing), , 配列関数_(array_functions), 配列_(arrays) @subsubsection 配列の添字付け (Array indexing) @c ?arrays indexing @cindex index 要素が N 個の配列 (array) の添字は、1 から N までとなります。 配列 A の i 番目の要素は、A[i] と参照します。 組み込み関数 `index(Array, )` は、A[i] が に等しいよう な整数 i を返します。ここで、 は数値 (整数、実数、または複素数) と評価される任意の数式、あるいは文字列です。配列の要素とは型と値の両方 が一致する必要があります。見つからない場合は、0 を返します。 @example array A = [ 4.0, 4, "4" ] print index( A, 4 ) 2 print index( A, 2.+2. ) 1 print index( A, "D4"[2:2] ) 3 @end example @node フォント, ヘルプの用語解説_(Glossary), 式_(Expressions), Gnuplot @section フォント @cindex fonts gnuplot それ自身にはどんなフォントも含まれてはおらず、外部フォント処理 に頼っているだけで、その細部は悲しいことに出力形式毎に異なります。ここ では、複数の出力形式に適用されるフォント機構について説明します。ここに 上げたもの以外の出力形式でのフォントの使用に関しては、その出力形式のド キュメントを参照してください。 一時的に、例えば Adobe Symbol フォントのような特別なフォントに切り替え ることでアルファベットではない記号を入れることも可能ですが、現在は、 UTF-8 エンコーディングを使用して、他の文字と同様にその記号を扱うのがよ り良い方法でしょう。その他に、必要な記号の Unicode コードポイントを、 拡張文字列モード内でエスケープシーケンスとして指定する手もあります。 以下参照: `encoding`, `unicode`, `locale`, `escape sequences`。 @menu * cairo_(pdfcairo:: * gd_(png:: * postscript_(カプセル化_postscript_*.eps_も):: @end menu @node cairo_(pdfcairo, gd_(png, フォント, フォント @subsection cairo (pdfcairo, pngcairo, epscairo, wxt 出力形式) @c ?fonts cairo @cindex fontconfig @c ?fonts fontconfig @cindex fonts @cindex pdf @cindex png @tmindex png @cindex wxt @tmindex wxt 出力形式により (例えば cairo 系の出力形式すべて)、fontconfig システム ライブラリを使ってフォントにアクセスします。 @uref{http://fontconfig.org/fontconfig-user.html,fontconfig ユーザマニュアル } を参照してください。これは、gnuplot で一般的な名前やサイズでフォントを 要求することを可能にし、必要ならば fontconfig に同等のフォントを代用さ せることもできるので、通常はこれで十分でしょう。以下は、多分いずれも機 能します: @example set term pdfcairo font "sans,12" set term pdfcairo font "Times,12" set term pdfcairo font "Times-New-Roman,12" @end example @node gd_(png, postscript_(カプセル化_postscript_*.eps_も), cairo_(pdfcairo, フォント @subsection gd (png, gif, jpeg, sixel terminals) @cindex gd @c ?fonts gd @cindex fonts @cindex png @tmindex png @cindex jpeg @cindex gif @cindex sixel png, gif, jpeg, sixelgd 出力形式のフォント処理は、外部ライブラリ libgd が行います。これは、最低でも `tiny`, `small`, `medium`, `large`, `giant` の 5 種類の基本フォントを提供しますが、これは伸縮させたり回転 したりはできません。これらの一つを使用する際は、`font` キーワードの代 わりに上のキーワードを指定します。例: @example set term png tiny @end example 多くのシステムで、libgd は、fontconfig ツールが提供する一般的なフォン ト処理も使用できます。以下参照: `fontconfig`。 fontconfig のないシステム上では、大抵 Adobe フォント (*.pfa) と TrueType フォント (*.ttf) へのアクセスを提供しています。その場合フォン ト自身の名前ではなく、フォントファイルの名前を、" @{,@}" の 形式で与えなければいけません。 ここで、 はフォントファイルのフルパス名か、または環境変数 GDFONTPATH で指示されるディレクトリの一つの中のファイル名の先頭部分、 のいずれかです。よって、'set term png font "Face"' は、 <あるディレクトリ>/Face.ttf か <あるディレクトリ>/Face.pfa というファ イル名のフォントを探そうとします。例えば、GDFONTPATH に `/usr/local/fonts/ttf:/usr/local/fonts/pfa` が含まれている場合は、以下 のコマンドの 2 つずつはいずれも同じことになります: @example set term png font "arial" set term png font "/usr/local/fonts/ttf/arial.ttf" set term png font "Helvetica" set term png font "/usr/local/fonts/pfa/Helvetica.pfa" @end example デフォルトのフォントサイズも同時に指定するには: @example set term png font "arial,11" @end example "set term" コマンドでフォントを指定しなかった場合、gnuplot は環境変数 GNUPLOT_DEFAULT_GDFONT を参照します。 @node postscript_(カプセル化_postscript_*.eps_も), , gd_(png, フォント @subsection postscript (カプセル化 postscript *.eps も) @c ?fonts postscript @cindex fonts @cindex postscript @cindex eps PostScript フォント処理は、プリンタか表示ソフトが行います。もし、あな たのコンピュータにフォントが一切なくても、gnuplot は正しい PostScript ファイル、またはカプセル化 PostScript (*.eps) ファイルを生成できます。 gnuplot は単に出力ファイル中にフォントを名前として入れるだけで、プリン タや表示ソフトがその名前からフォントを見つけるか近似することを仮定して います。 PostScript プリンタや表示ソフトはすべて、標準的な Adobe フォントセット `Times-Roman`, `Helvetica`, `Courier`, `Symbol` は知っているはずです。 多分その他にも多くのフォントが使えるようになっていると思いますが、それ ら特定のフォントセットはあなたのシステムやプリンタの設定に依存します。 gnuplot は、それは知りませんし気にもしません。gnuplot が作成した *.ps や *.eps 出力は、あなたの要求したフォント名を単に持っているだけです。 よって、 @example set term postscript eps font "Times-Roman,12" @end example は、すべてのプリンタや表示ソフトに適切な出力を作成します。 一方、 @example set term postscript eps font "Garamond-Premier-Pro-Italic" @end example は、正しい PostScript 出力ファイルを作成しますが、それは特別な専用フォ ントを参照しているので、要求されたその特定のフォントは一部のプリンタや 表示ソフトでしか表示できないでしょう。大抵の場合は別なフォントで代用さ れます。 しかし、指定したフォントを出力ファイル中に埋め込んで、どんなプリンタで もそれを使うようにすることも可能です。これには、あなたのシステムに適切 なフォント記述ファイルがあることが必要となります。この方法でフォントを 埋め込む場合、特定のライセンスが必要となるフォントファイルもあることに 注意してください。より詳細な説明や例については、以下参照: `postscript fontfile`。 @node ヘルプの用語解説_(Glossary), インラインデータとデータブロック_(inline_data_and_datablocks), フォント, Gnuplot @section ヘルプの用語解説 (Glossary) @cindex glossary @cindex terminal @cindex screen @cindex record @cindex block `gnuplot` は 30 年以上かけて開発されているので、コマンドやこの文書で使 われている用語の意味は、現在の普通の用法とは違っているかもしれません。 この節では、`gnuplot` 内ではそれらの用語のいくつかをどのように使ってい るかを説明します。 用語 "出力形式 (terminal)" は、出力モードのことを意味し、あなたがキー ボード入力するもの (ターミナル) を指しているのではありません。例えば、 コマンド `set terminal pdf` は、その後の描画コマンドが PDF 出力を生成 することを意味します。通常は、その PDF 出力を書き出す場所を指定するコ マンド `set output "filename"` を一緒に使う必要があるでしょう。 "ページ (page)"、"表示画面 (screen)"、"キャンバス (canvas)" は、 `gnuplot` がアクセス可能な領域全体を指します。デスクトップではそれはウ ィンドウ全体を指し、プロッタでは、一枚の紙全体を指します。 データファイルに関する議論では、用語 "行 (record)" は、ファイルの一行 の文字列、すなわち、改行文字や行末文字同士に挟まれた文字列を指します。 "点 (point)" は、一行から取り出した一つのデータです。データの "ブロック (block)" は、空行で区切られた連続した複数の行からなる集合で す。データファイルの議論の中で "line" が参照される場合は、これはブロッ クの部分集合を指します。"データのブロック (data block)" という言葉は、 インラインデータの名前付きブロックを指すのにも使われています。以下参照: `datablocks`。 @node インラインデータとデータブロック_(inline_data_and_datablocks), 繰り返し_(iteration), ヘルプの用語解説_(Glossary), Gnuplot @section インラインデータとデータブロック (inline data and datablocks) @c ?inline data @cindex inline @c ?data inline @cindex datablocks @c ?data datablocks gnuplot のコマンド入力の中にデータを埋め込む仕組みは 2 種類用意されて います。まず、特殊ファイル名 '-' が plot コマンド中に与えると、その plot コマンド以下に続く行がインラインデータと解釈されます。以下参照: `special-filenames`。この方法で提供されるデータは、その plot コマンド で一度しか使用できません。 もう一つは、ヒアドキュメントとして名前付きのデータブロックを定義する方 法です。その名前付きのデータは残るので、複数の plot コマンドで参照でき ます。例: @example $Mydata << EOD 11 22 33 first line of data 44 55 66 second line of data # データファイル同様コメントも機能する 77 88 99 EOD stats $Mydata using 1:3 plot $Mydata using 1:3 with points, $Mydata using 1:2 with impulses @end example データブロック名は、他の変数と区別するために、最初の文字を $ にする必 要があります。データの終わりの区切り (上の例では EOD) は、任意のアルフ ァベット、数字からなる文字列で構いません。 データを名前付きブロックに保存するかわりに、実行可能コマンドを保存する 同様の仕組みについては、以下参照: `function blocks`。 コマンド `undefine` を使えば、保存した名前付きデータブロックを削除でき ます。`undefine $*` は、すべての名前付きデータブロック、関数ブロックを 一度に削除します。 @node 繰り返し_(iteration), 線種、色、スタイル_(linetypes), インラインデータとデータブロック_(inline_data_and_datablocks), Gnuplot @section 繰り返し (iteration) @cindex iteration @cindex iterate gnuplot は、繰り返し (iteration) コマンドやブロック構造を扱うための if/else/while/do をサポートしています。以下参照: @ref{if}, `while`, `do`。 コマンド `plot`, `set` で単純な繰り返しも可能です。以下参照: `plot for`。複数のコマンドを包含する一般的な繰り返しは、下で紹介するブ ロック構造を利用することで行えます。 関連する新しい機能である数式型の以下も参照: `summation`。 以下は、これらの新しい構文機能をいくつか利用した例です: @example set multiplot layout 2,2 fourier(k, x) = sin(3./2*k)/k * 2./3*cos(k*x) do for [power = 0:3] @{ TERMS = 10**power set title sprintf("%g term Fourier series",TERMS) plot 0.5 + sum [k=1:TERMS] fourier(k,x) notitle @} unset multiplot @end example @cindex iteration-specifier 繰り返しは、以下のような書式による繰り返し指定で制御します。 @example for [ in "string of N elements"] for [ = : @{ : @}] for [ in Array] @end example 最初の書式では は文字列変数で、その後ろに指定した文字列に含まれ る 1 番目から N 番目までの単語文字列を順に値として取ります。 2 番目の書式では、, , は整数、または整数値を取 る数式です。 3 番目の書式では は配列 Array の要素を順番に取りますが、要素が数 値であるか文字列であるかは考慮しません。未定義要素は、黙ってスキップし ます。配列要素に渡る繰り返しは試験段階です (詳細は、gnuplot の安定リリ ース版が出るまえに変更されるかもしれません)。 @cindex scope 繰り返し変数の有効範囲 (scope) は、その繰り返しの中だけです。以下参照: `scope`。繰り返し変数の値を、その実行ブロック内で永続的に変更すること はできません。繰り返し変数が繰り返しの前に値を持っていたとしたら、その 値は繰り返しの終了時に保持、または復帰されます。 例えば、以下のコマンドは、1 2 3 4 5 6 7 8 9 10 A を出力します。 @example i = "A" do for [i=1:10] @{ print i; i=10; @} print i @end example @node 線種、色、スタイル_(linetypes), レイヤー_(layers), 繰り返し_(iteration), Gnuplot @section 線種、色、スタイル (linetypes) @cindex linetypes @cindex colors とても古い版の gnuplot では、各出力形式は "線種 (linetype)" をある程度 用意していて、それらは色、太さ、点線/破線のパターン、または色と点線/破 線の組合せで違いを表現していました。それらの色、点線/破線のパターンは、 出力形式を越えて同じものになるという保証は何もありませんでしたが、多く は同じ色の列、赤/緑/青/紫/水色/黄色を使用していました。この古い挙動は、 今は `set colorsequence classic` で選択できますが、現在の gnuplot のデ フォルトは、出力形式に無関係に共通の 8 色列を使用します。 線種 (linetype) の属性の並びは、対話的か初期化ファイルのいずれかによっ てさらにカスタマイズ可能です。以下参照: @ref{linetype}。配布パッケージ に初期化ファイルのサンプルがいくつか用意されています。 特定の出力形式に対する線種の属性の現在の状態は、その出力形式を設定した あとで @ref{test} コマンドを実行することで確認できます。 一つの描画コマンド内での関数やデータファイルの連続する並びには、現在の デフォルトの線種列から線種が順番に割り当てられます。個々の関数、データ ファイル、またはその他の描画要素に対する線種は、その描画コマンド上で明 示的に線の属性を指定することで上書きできます。 例: @example plot "foo", "bar" # 線種 1, 2 で 2 ファイルを描画 plot sin(x) linetype 4 # 線種色 4 を使用 @end example 一般に、色の指定は、色の名前か、RGB (赤、緑、青) 成分か、HSV (色相、彩 度、明度) 成分か、現在の pm3d パレットに沿った座標で行います。キーワー ド `linecolor` は、`lc` と省略できます。 例: @example plot sin(x) lc rgb "violet" # gnuplot 内の色名の一つを使用 plot sin(x) lc rgb "#FF00FF" # 明示的な 16 進 RGB 3 つ組 plot sin(x) lc palette cb -45 # 現在のパレットの cbrange の # -45 に対応する色 plot sin(x) lc palette frac 0.3 # パレットに対応する小数値 @end example 以下参照: `colorspec`, `show colornames`, `hsv`, `set palette`, @ref{cbrange}。以下も参照: @ref{monochrome}。 線種 (linetype) には、点線/破線のパターンも結びつけられていますが、す べての出力形式でそれが使えるわけではありません。線色とは独立に点線/破 線パターンを指定できます。以下参照: `dashtype`。 @menu * 色指定_(colorspec):: * 点線/破線種_(dashtype):: * linestyles_と_linetypes:: * 特別な線種_(special_linetypes):: @end menu @node 色指定_(colorspec), 点線/破線種_(dashtype), 線種、色、スタイル_(linetypes), 線種、色、スタイル_(linetypes) @subsection 色指定 (colorspec) @cindex colorspec @cindex colors @cindex lc @cindex linecolor @cindex tc @cindex textcolor @cindex fillcolor 多くのコマンドで、明示的な色の指定をともなった線種を指定することができ ます。 書式: @example ... @{linecolor | lc@} @{"colorname" | | @} ... @{textcolor | tc@} @{ | @{linetype | lt@} @} ... @{fillcolor | fc@} @{ | linetype | linestyle @} @end example は以下の形式のいずれかです: @example rgbcolor "colorname" # 例: "blue" rgbcolor "0xRRGGBB" # 16 進数値の定数文字列 rgbcolor "0xAARRGGBB" # 16 進数値の定数文字列 rgbcolor "#RRGGBB" # x11 形式の 16 進数文字列 rgbcolor "#AARRGGBB" # x11 形式の 16 進数文字列 rgbcolor # AARRGGBB を表す整数値 rgbcolor variable # 入力ファイルから整数値を読み込む palette frac # は 0 から 1 の値 palette cb # は cbrange の範囲の値 palette z palette # 名前付きカラーマップを使用 variable # 入力ファイルから色番号を読み込む bgnd # 背景色 black @end example は、その線種 (linetype) 番号が使う色を意味します。以下参照: @ref{test}。 "colorname" は gnuplot が内部に持っている色の名前のうちの一つを指定し ます。有効な名前の一覧に関しては、以下参照: `show colornames`。 16 進定数は、引用符付きで "#RRGGBB" や "0xRRGGBB" の形で与えることがで きます。RRGGBB は、色の赤、緑、青の成分を意味し、それぞれ 00 から FF までの範囲内でなければいけません。例えば、マゼンタ (紫) は、最も明るい 赤 + 最も明るい青、なので "0xFF00FF" と表され、これは 16 進数で (255 << 16) + (0 << 8) + (255) を意味しています。 "#AARRGGBB" は、RGB 色の上位ビットにアルファ値 (透過性) がついているこ とを意味します。アルファ値 0 は完全に不透明色であることを意味し、よっ て "#00RRGGBB" は "#RRGGBB" と同じになります。アルファ値の 255 (FF) は 完全に透明であることを意味します。 これらの任意の形式から、色の 32 ビット整数表現への変換を行うのに利用で きる関数については、以下参照: `expressions functions rgbcolor`。 カラーパレットとは、色の線型なグラデーションで、単一の数値を特定の色に 滑らかに対応づけます。常にそのような 2 つの対応付けが効力を持ちます。 `palette frac` は 0 から 1 までの小数値を、カラーパレットの全範囲に対 応付けるもので、`palette cb` は、色軸の範囲を同じカラーパレットへ割り 当てるものです。以下参照: @ref{cbrange}, `set colorbox`。これらの対応 付けのどちらかを使って、現在のパレットから定数色を選び出すことができま す。 "palette z" は、各描画線分や描画要素の z の値を、パレットへ対応づけら れている cbrange の範囲に対応づけます。これにより、3 次元の曲線や曲面 に沿って色を滑らかに変化させることができます。これは、2 次元描画で、パ レット値を追加の列データから読み込ませて色付けするのにも使えます (すべ ての 2 次元描画スタイルがこの追加列を認識するわけではありません)。 @cindex bgnd @cindex black 特殊な色指定が 2 つあります。背景色の `bgnd` と、`black` です。 @menu * background_color:: * linecolor_variable:: * palette_:: * rgbcolor_variable:: @end menu @node background_color, linecolor_variable, 色指定_(colorspec), 色指定_(colorspec) @subsubsection background color @cindex background @cindex bgnd 多くの出力形式でグラフの背景色を明示的に設定できます。特別な線種 (linetype) `bgnd` はその色で描画しますが、その `bgnd` は色としても認識 されます。 例: @example # 以下はキャンバスの一部分を背景色で上書きすることで消去します。 set term wxt background rgb "gray75" set object 1 rectangle from x0,y0 to x1,y1 fillstyle solid fillcolor bgnd # y=0 に「見えない」線を描き、その下のものをすべて消します。 plot 0 lt bgnd @end example @node linecolor_variable, palette_, background_color, 色指定_(colorspec) @subsubsection linecolor variable @c ?linecolor variable @c ?linestyle variable @c ?lc variable @c ?ls variable @c ?textcolor variable @c ?tc variable @c ?variable linecolor `lc variable` は、入力データの一つの列から読んだ値を線種 (linetype) の 番号として使い、その線種に属する色を使うようプログラムに指示します。よ ってこれは、`using` 指定子へ対応する列の指定の追加を必要とします。 `ls variable` は、入力データ列から読み込んだ値が線種でなく linestyle 番号として解釈されることを除いて同じことをします。文字の色も同様に、 `tc variable` で指定できます。 例: @example # データの 3 列目を、個々の点に色を割り当てるのに使用 plot 'data' using 1:2:3 with points lc variable @end example @example # 一つのデータファイルには複数のデータ集合を入れることが可能で、 # それらは 2 行の空行で分離されています。個々のデータ集合には # index 値が割り当てられていて (以下参照: @ref{index})、using 指定の # column(-2) で取得できます。以下参照: `pseudocolumns`。以下の例 # は -2 の column 値を使って、個々のデータ集合を異なる線色で描画 # します。 plot 'data' using 1:2:(column(-2)) with lines lc variable @end example @node palette_, rgbcolor_variable, linecolor_variable, 色指定_(colorspec) @subsubsection palette @c ?colorspec palette 書式 @example ... @{lc|fc|tc@} palette @{z@} ... @{lc|fc|tc@} palette frac ... @{lc|fc|tc@} palette cb ... fc palette @end example パレットは、0 から 1 までの灰色値で、色の範囲を定義したものですが、 `palette frac ` は、灰色値 でその色を選択します。 `palette cb ` は、灰色値が (z - cbmin) / (cbmax - cbmin) である色を 選択します。 `palette` と `palette z` はどちらも描画要素の z 座標を現在のパレットの 色に写像します。z が cbrange の範囲外ならば、それはデフォルトでは palette fraction 0 か palette fraction 1 になります。オプション `set pm3d noclipcb` がセットされている場合、z 座標が範囲外にある pm3d グラフの 四辺形は何も描かれなくなります。 `fillcolor palette ` は、描画要素の z 座標を、現在のパレット を使用するのではなく、事前に保存した名前付きカラーマップに写像します。 以下参照: @ref{colormap}。 カラーマップがそれ用の個別の範囲を持っている場合、cbrange を標準パレッ トに写像するのに使うのと同様に、z の値を写像するのにその範囲を使用しま す。 @node rgbcolor_variable, , palette_, 色指定_(colorspec) @subsubsection rgbcolor variable @c ?rgbcolor variable @c ?lc rgbcolor variable @c ?tc rgbcolor variable @c ?variable rgbcolor @c ?variable textcolor グラフの各データ点、各線分、または各ラベルにそれぞれ異なる色を割り当て ることができます。`lc rgbcolor variable` は、データファイルの各行から RGB 色の情報を読み込むようプログラムに指示します。よってこれは、 `using` 指定子による対応する列の指定の追加を必要とし、その列は 24-bit 形式の RGB の 3 つ組であるとみなされます。その値をデータファイルから直 接与える場合は、これは最も簡単な形式の 16 進値で与えます (以下参照: `rgbcolor`)。一方で、以下の例のように 24-bit RGB 色として評価されるよ うな数式を `using` 指定子に入れることもできます。文字の色も同様に、 `tc rgbcolor variable` で指定できます。 例: @example # 3 次元描画で、各 x,y,z 座標に対応した赤、緑、青の成分を持つ色 # のついた点を配置 rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b) splot "data" using 1:2:3:(rgb($1,$2,$3)) with points lc rgb variable @end example @node 点線/破線種_(dashtype), linestyles_と_linetypes, 色指定_(colorspec), 線種、色、スタイル_(linetypes) @subsection 点線/破線種 (dashtype) @cindex dashtype @cindex dashtype `linecolor` や `linewidth` と同様に、点線/破線パターン (`dashtype`) が 各曲線毎の属性として独立しました。従来のような、使用中の出力形式の点線 を書くための特別なモードとして指定する必要はありません。すなわち、 `set term @{solid|dashed@}` のような古いコマンドは現在は無視 されます。 すべての線は、ほかに指定しなければ、`dashtype solid` という属性を持ち ますが、このデフォルト値をコマンド @ref{linetype} で特定の線種に変更し その後のコマンドで使えるようにできます。または、`plot` や他のコマンド の一部分として使用したい点線/破線の型を指定できます。 書式: @example dashtype N # 定義済み点線/破線型を番号で呼び出し dashtype "pattern" # 点 (.) 横線 (-) 下線 (_) と空白の組み合わ # せ文字列による指定 dashtype (s1,e1,s2,e2,s3,e3,s4,e4) # 1~4 個の <実線長>,<空白長> # の組による点線/破線パターン指定 @end example 例: @example # 2 つの関数が線種 1 を使うが dashtype で区別 plot f1(x) with lines lt 1 dt solid, f2(x) with lines lt 1 dt 3 @end example いくつかの出力形式は、それが提供する定義済み点線/破線パターンに、ユー ザ定義パターンを追加することをサポートしています。 例: @example plot f(x) dt 3 # 出力形式の持つパターン 3 を使用 plot f(x) dt ".. " # 一時的なパターンを作成 plot f(x) dt (2,5,2,15) # 同じパターンを数値で表現 set dashtype 11 (2,4,4,7) # 新パターンを番号で呼び出せるよう定義 plot f(x) dt 11 # 新パターンを使って描画 @end example 点線/破線パターンを文字列で指定した場合、gnuplot はそれを <実線長>, <空白長> の組の列に変換します。ドット "." は (2,5) に、ダッシュ "-" は (10,10) に、下線 "_" は (20,10) に、また空白 " " は直前の <空白長> の 値に 10 を追加します。その場合、コマンド `show dashtype` は、元の文字 列と変換後の数値の列の両方を表示します。 @node linestyles_と_linetypes, 特別な線種_(special_linetypes), 点線/破線種_(dashtype), 線種、色、スタイル_(linetypes) @subsection linestyles と linetypes @c ?linestyles vs linetypes `linestyle` は、属性 linecolor, linewidth, dashtype, pointtype の一時 的な組み合わせで、これはコマンド `set style line` で定義します。一度 linestyle を定義すると、1 回の plot コマンド上でそれを使って、1 つ、ま たはより多くの描画要素の見た目を制御できます。言い換えれば、これは丁度 linetype から永続性を取り除いたもの、と言うことができるでしょう。 `linetypes` は永続的 (明示的にそれらを再定義するまでは保持される) です が、`linestyles` は、次のグラフィックの状態がリセットされるまでの間し か保持されません。 例: @example # 新しいラインスタイルを、出力形式に依存しない色 cyan、線幅が 3、 # 点種 6 (丸の中に点) と定義 set style line 5 lt rgb "cyan" lw 3 pt 6 plot sin(x) with linespoints ls 5 # 定義スタイル 5 で @end example @node 特別な線種_(special_linetypes), , linestyles_と_linetypes, 線種、色、スタイル_(linetypes) @subsection 特別な線種 (special linetypes) @c ?linetypes special linetypes @cindex special_linetypes @cindex nodraw @cindex bgnd @cindex background @cindex black 特別な (数値ではない) 線種 (linetype) がいくつか用意されています。 `lt black` は、黒い実線を意味します。 `lt bgnd` は、現在の出力形式の背景色の実線を意味します。以下参照: `background`。 `lt nodraw` は、その曲線全体の描画をスキップします。これは、描画スタイ ル @ref{linespoints} と組み合わせて使うと便利です。すなわち、この描画スタ イルのみに有効な点部分の属性を残しつつ、線部分を抑制することが可能にな ります。例えば、 @example plot f(x) with linespoints lt nodraw pointinterval -3 @end example は、3 点置きに描画し、その下に背景色の小さな円を置くことで孤立させます。 以下参照: @ref{linespoints}。`lt nodraw` は、自動的に描かれる線分の特別な 集合を抑制するのにも使えます。例えば、等高線描画の中のあるレベルの等高 線を、その線種に `nodraw` を設定することで、その描画を抑制できます。 @node レイヤー_(layers), マウス入力_(mouse_input), 線種、色、スタイル_(linetypes), Gnuplot @section レイヤー (layers) @cindex layers @cindex behind @cindex front @cindex back gnuplot のグラフは、色々な要素を固定された順番で描き上げていくことで構 成されています。この順番は、キーワード `behind`, `back`, `front` を使 って要素に特定の階層を割り当てることで変更できます。例えば、グラフ領域 の背景色を変更するには、色のついた長方形を属性 `behind` で定義すればい いわけです。 @example set object 1 rectangle from graph 0,0 to graph 1,1 fc rgb "gray" behind @end example 描画の順番は以下の通りです: @example behind back グラフ自体 グラフの表題 (`key`) front @end example 各階層内では、要素の描画は以下の順番です: @example 格子線、軸、境界要素 (grid, axis, border elements) 番号順のピクスマップ画像 (pixmaps) 番号順のオブジェクト (rectangle, circle, ellipse, polygon) 番号順のラベル (label) 番号順の矢印 (arrow) @end example 1 ページに複数のグラフがある場合 (multiplot モード)、この順序は、複数 グラフを全体として適用するのではなく、各描画要素に別々に適用します。 これに対する例外は、TeX 系の出力形式 (例えば pslatex や cairolatex 等) で、これらは一つの出力にすべての文字列要素を積み重ね、グラフ要素は別な 出力に積み重ねます。一般にこの場合、各文字列要素は全部がグラフの前に出 てしまうか、逆に全部がグラフの裏に置かれてしまうかのどちらかになります。 @node マウス入力_(mouse_input), 残留_(Persist), レイヤー_(layers), Gnuplot @section マウス入力 (mouse input) @c ?mouse input 多くの出力形式で、現在の描画にマウスを使って作用をすることが可能になっ ています。そのうちいくつかはホットキーの定義もサポートしていて、マウス カーソルが有効な描画ウィンドウにあるときに、あるキーを押すことであらか じめ定義した関数を実行させることができます。マウス入力を `batch` コマ ンドスクリプトと組み合わせることも可能で、例えば `pause mouse` として、 その後にマウスクリックによってパラメータとして返って来るマウス変数をそ の後のスクリプト動作に反映させることができます。以下参照: `bind`, `mouse variables`。また以下も参照: `set mouse`。 @menu * bind:: * マウス用の変数_(Mouse_variables):: @end menu @node bind, マウス用の変数_(Mouse_variables), マウス入力_(mouse_input), マウス入力_(mouse_input) @subsection bind @c ?commands bind @cindex hotkey @cindex hotkeys @cindex bind @opindex bind 書式: @example bind @{allwindows@} [] [""] bind "" reset bind @end example `bind` は、ホットキーの定義、再定義に使用します。ホットキーとは、入力 カーソルがドライバのウィンドウ内にあるときに、あるキー、または複数のキ ーを押すことで、gnuplot のコマンド列を実行させる機能のことを言います。 `bind` は、gnuplot が `mouse` をサポートするようにコンパイルされていて かつマウスが有効な出力形式上で使われてる場合にのみ有効であることに注意 してください。ユーザ指定のキー割当 (binding) は、組み込み (builtin) キ ー割当を置き換えますが、 と 'q' は通常は再定義はできません。そ の唯一の例外については、以下参照: `bind space`。 マウスボタン割り当ては、2 次元描画でのみ有効です。 ホットキーの一覧を得るには `show bind`, または `bind` とタイプするか、 グラフウィンドウ上でホットキー 'h' を入力してください。 キー定義は、`reset bind` でデフォルトの状態に復帰できます。 修飾キーを含む複数のキーの定義は引用符で囲む必要があることに注意してく ださい。 標準ではホットキーは現在の描画ウィンドウ上に入力カーソルがある場合のみ 認識されます。`bind allwindows ...` (`bind all ...` と省略 可) は、 の割当を、それが現在の有効なものか否かに関わらず、すべて の gnuplot の描画ウィンドウ上で可能にします。この場合、gnuplot 変数 MOUSE_KEY_WINDOW にそれが行なわれたウィンドウの ID が保存されるのでそ れをキーに割り当てたコマンドで使用することができます。 例: - キー割当の設定: @example bind a "replot" bind "ctrl-a" "plot x*x" bind "ctrl-alt-a" 'print "great"' bind Home "set view 60,30; replot" bind all Home 'print "This is window ",MOUSE_KEY_WINDOW' @end example - キー割当を表示: @example bind "ctrl-a" # ctrl-a に対するキー割当を表示 bind # 全てのキー定義を表示 show bind # 全てのキー定義を表示 @end example - キー割当を削除: @example bind "ctrl-alt-a" "" # ctrl-alt-a のキー割当を削除 (組み込みキー定義は削除されません) reset bind # デフォルト (組み込み) のキー定義を導入 @end example - トグルスイッチ形式にキー割当: @example v=0 bind "ctrl-r" "v=v+1;if(v%2)set term x11 noraise; else set term x11 raise" @end example 修飾キー (ctrl / alt) は大文字小文字の区別はありませんが、キーはそうで はありません: @example ctrl-alt-a == CtRl-alT-a ctrl-alt-a != ctrl-alt-A @end example 修飾キー (alt == meta) の一覧: @example ctrl, alt, shift (ボタン 1, ボタン 2, ボタン 3 でのみ有効) @end example サポートされている特殊キーの一覧: @example "BackSpace", "Tab", "Linefeed", "Clear", "Return", "Pause", "Scroll_Lock", "Sys_Req", "Escape", "Delete", "Home", "Left", "Up", "Right", "Down", "PageUp", "PageDown", "End", "Begin", @end example @example "KP_Space", "KP_Tab", "KP_Enter", "KP_F1", "KP_F2", "KP_F3", "KP_F4", "KP_Home", "KP_Left", "KP_Up", "KP_Right", "KP_Down", "KP_PageUp", "KP_PageDown", "KP_End", "KP_Begin", "KP_Insert", "KP_Delete", "KP_Equal", "KP_Multiply", "KP_Add", "KP_Separator", "KP_Subtract", "KP_Decimal", "KP_Divide", @end example @example "KP_1" - "KP_9", "F1" - "F12" @end example 以下は、実際のキーではなく、ウィンドウに関するイベントです: @example "Button1" "Button2" "Button3" "Close" @end example 以下も参照: `mouse`。 @menu * bind_space:: @end menu @node bind_space, , bind, bind @subsubsection bind space @c ?commands bind space @c ?bind space gnuplot が、configure 時にオプション --enable-rase-console をつけてイ ンストールされた場合は、描画ウィンドウ内で をタイプすると gnuplot のコマンドウィンドウが前面に出ます。多分。実際には、これは強く システムに依存します。このホットキーは、'gnuplot -ctrlq' のようにして gnuplot を起動するか、または X リソースの 'gnuplot*ctrlq' を設定するこ とで ctrl-space に変更できます。 @node マウス用の変数_(Mouse_variables), , bind, マウス入力_(mouse_input) @subsection マウス用の変数 (Mouse variables) @c ?mouse variables `mousing` (マウス機能) が有効な場合、現在のウィンドウ上でのマウスクリ ックによって gnuplot のコマンドライン上で使うことができる色々なユーザ 変数が設定されます。クリック時のマウスの座標は変数 MOUSE_X, MOUSE_Y, MOUSE_X2, MOUSE_Y2 に代入されます。クリックされたボタンや、そのときの メタキーの状態は MOUSE_BUTTON, MOUSE_SHIFT, MOUSE_ALT, MOUSE_CTRL に代 入されます。これらの変数は任意の描画の開始時には未定義で、有効な描画ウ ィンドウ中でのマウスクリックイベントによって初めて定義されます。有効な 描画ウィンドウ中でマウスが既にクリックされたかどうかをスクリプトから調 べるには、これらの変数のうちのどれか一つが定義されているかどうかをチェ ックすれば十分です。 @example plot 'something' pause mouse if (exists("MOUSE_BUTTON")) call 'something_else'; \ else print "No mouse click." @end example 描画ウィンドウ上での一連のキー入力を追跡することも、マウスコードを使う ことで可能となります。 @example plot 'something' pause mouse keypress print "Keystroke ", MOUSE_KEY, " at ", MOUSE_X, " ", MOUSE_Y @end example `pause mouse keypress` が、キー入力で終了した場合は MOUSE_KEY には押さ れたキーの ASCII コードが保存されます。MOUSE_CHAR にはその文字自身が文 字列値として保存されます。pause コマンドが (例えば ctrl-C や描画ウィン ドウが外部から閉じられるなどして) 異常終了した場合は MOUSE_KEY は -1 になります。 マウスによる拡大の後の新しい描画範囲は、GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN, GPVAL_Y_MAX で参照できることに注意してください。 以下参照: `gnuplot-defined variables`。 @node 残留_(Persist), 描画_(Plotting), マウス入力_(mouse_input), Gnuplot @section 残留 (Persist) @cindex persist gnuplot の多くの出力形式 (aqua, pm, qt, x11, windows, wxt, ...) が、ス クリーン上にグラフをその中に描いた表示用のウィンドウを別に開きます。オ プション `persist` は、主たるプログラムが終了したときにも、それらのウ ィンドウを残すよう gnuplot に指示します。 これは、非対話型出力形式出力では何もしません。 例えば、以下のコマンドを実行すると @example gnuplot -persist -e 'plot sinh(x)' @end example gnuplot は、表示ウィンドウを開き、その中にグラフを描き、そして終了し、 表示ウィンドウはグラフをその中に持ったままスクリーンに残ります。 新しい出力形式を設定するときに `persist` や `nopersist` を指定すること もできます。 @example set term qt persist size 700,500 @end example 出力形式によっては、その残ったウィンドウ上でも多少のマウス操作が可能な 場合もあります。しかし、グラフの再描画を要求するズーム (とその逆) のよ うな操作は、既にプログラムが終了しているので無理です。描画ウィンドウを 開いたまま残し、その後のマウス機能も完全に可能にするには、例えば gnuplot を対話型ではなく、スクリプトファイルから実行させる方法がありま す。以下参照: `pause mouse close`。 @node 描画_(Plotting), プラグイン_(Plugins), 残留_(Persist), Gnuplot @section 描画 (Plotting) @cindex plotting `gnuplot` にはグラフを描画する 4 つのコマンド `plot`, `splot`, @ref{replot}, @ref{refresh} があります。他のコマンドは、最終的にグラフ上に生成される描画 要素や、レイアウト、スタイルの制御を行います。 `plot` は 2 次元グラフを生成します。`splot` は 3 次元グラフ (もちろん 実際にはその 2 次元面への射影) を生成します。@ref{replot} は、直前の `plot` や `splot` コマンドを再実行します。@ref{refresh} は、@ref{replot} と似ています が、入力データをファイルや入力ストリームから再読み込みする代わりに、前 に保存したデータを再使用します。 @cindex multiplot @cindex inset @cindex subfigures これら 4 つのコマンドのうちの一つを実行した場合は、現在定義されている 軸、ラベル、タイトル、および元の plot コマンドで指定されたさまざまな関 数やデータのすべてを含む出力のスクリーンを再描画するか、新しい出力ペー ジを生成します。もし、一つのページに複数のグラフを隣り合うように並べて 出力したい場合、例えば複数の図のパネルを作成したり、大きなグラフの中に 小さなグラフを挿入したりしたい場合は、コマンド `set multiplot` を使用 し、各描画コマンドで新しいページが作られるのを抑制してください。 描画に関する一般的な情報の大半は、`plot` に関する項で見つかります。3 次元描画に固有の情報は `splot` の項にあります。 `plot` は xy 直交座標系と極座標系が使えます。以下参照: `set polar`。 `splot` は xyz 直交座標が使えますが、3 次元極座標、円柱座標データも入 力できます。以下参照: `set mapping`。 @cindex axes `plot` では、4 つの境界 x (下), x2 (上), y (左), y2 (右) をそれぞれ独 立な軸として扱うこともできます。オプション `axes` で、与えられた関数や データ集合をどの軸のペアで表示させるかを選べます。また、各軸の縮尺や見 出しづけを完全に制御するために十分な補佐となる `set` コマンド群が存在 します。いくつかのコマンドは、`set xlabel` のように軸の名前をその中に 持っていますし、それ以外のものは `set logscale xy` のように、1 つ、ま たは複数の軸の名前をオプションとしてとります。z 軸を制御するオプション やコマンドは 2 次元グラフには効力を持ちません。 `splot` は、点や線に加えて曲面や等高線を書くことができます。3 次元の関 数の格子定義に関する情報については、以下参照: `set isosamples`。3 次元 データのファイルに必要な形態については、以下参照: @ref{datafile}。等 高線に関する情報については、以下参照: `set contour`, `set cntrlabel`, `set cntrparam`。 `splot` での縮尺や見出し付けの制御は、z 軸にも有効であること、および x2 軸、y2 軸のラベル付けが `set view map` を使って作られる疑似的な 2 次元描画にのみ可能であることを除けば `plot` と全く同じです。 @node プラグイン_(Plugins), Scope_of_variables, 描画_(Plotting), Gnuplot @section プラグイン (Plugins) @cindex plugins グラフや数式に利用できる関数群は、共有ライブラリから実行可能な関数を取 り込むプラグインの仕組みにより拡張できます。例えば、gnuplot のバージョ ン 5.4 では、上方不完全ガンマ関数 Q(a,x) は組み込み関数としては実装し ていませんでした。 これは、gnuplot 内で直接以下のようにして近似的に定義できます。 @example Q(a,x) = 1. - igamma(a,x) @end example しかし、これは、1 の近くの igamma(a,x) の値の精度に実質的な限界があり ます。より正確な値を返す実装が欲しい場合、プラグインを通して用意するの がいいでしょう (下を参照)。一度取り込めば、関数は、gnuplot 内の他の組 み込み関数、ユーザ定義関数と全く同様に利用できます。 以下参照: @ref{import}。 gnuplot の配布物のディレクトリ demo/plugin には、プラグインライブラリ を生成するための説明とソースコードがあります。簡単なサンプルファイル `demo_plugin.c` の関数を、あなたの興味ある関数の実装に置き換えて修正し てください。 これには、外部の数学ライブラリの関数の呼び出しも含まれています。 ディレクトリ demo/plugin には、Q(a,x) を実装するプラグインのソースも あります。上で注意したように、このプラグインは、gnuplot バージョン 6 に含まれる @ref{uigamma} と同じ関数を、以前のバージョンに実装することを可 能にします。 @example import Q(a,x) from "uigamma_plugin" uigamma(a,x) = ((x<1 || x plot FOO watch mouse @end example @example set style watchpoints nolabels set style watchpoints label @end example @example unset style watchpoints # デフォルトスタイルに戻す @end example @example show watchpoints # 直前の plot コマンドからのすべてのウォッチ # ポイントを要約表示 @end example 一つのウォッチポイントは、x, y, z 座標、または関数 f(x,y) に対する一つ の対象値です。各ウォッチポイントは、コマンド `plot` 内の一つのグラフに 付随します。ウォッチポイントは、`with lines` と @ref{linespoints} の 描画スタイルでのみ機能します。その場合、そのグラフのすべての構成線分に 対し、そのグラフに付随するすべてのウォッチポイントがチェックされ、一つ 以上のウォッチポイントの対象がその線分上の点で満たされるかどうかを調べ ます。対象条件を満たす (「ヒット」("hits") と呼びます) 点の一覧は、グ ラフの描画毎に累積されます。 例えば、対象値 y=100 のウォッチポイントがある場合、各線分に対して、そ の両端点の y 座標がその対象値を挟んでいるかをチェックします。もしそう なら、その線分上のある点 [x,y] が、対象条件 y=100 を完全に満たすことに なります。そして線形補間、または 2 分反復法によりその対象点が見つかり ます。 一つの plot コマンド上の複数のウォッチポイントは、順番に番号づけします。 各描画要素毎に、1 つ以上のウォッチポイントを指定できます。 例: @example plot DATA using 1:2 smooth cnormal watch y=0.25 watch y=0.5 \ watch y=0.75 @end example 直前の plot コマンドで対象にヒットしたウォッチポイントは、WATCH_n とい う名前の配列に保存されます。直前の plot コマンドからヒットしたすべての ウォッチポイントの要約を表示させることもできます。以下参照: @ref{watchpoints}。 @example gnuplot> show watchpoints Plot title: "DATA using 1:2 smooth cnormal" Watch 1 target y = 0.25 (1 hits) hit 1 x 49.7 y 0.25 Watch 2 target y = 0.5 (1 hits) hit 1 x 63.1 y 0.5 Watch 3 target y = 0.75 (1 hits) hit 1 x 67.8 y 0.75 @end example 平滑化: 線分は、それらを描画する際にチェックします。平滑化しないデータ 描画に対しては、これは、補間によって見つかる対象点は、2 つのデータ点を 結ぶ線分の上に完全に乗ることを意味します。データグラフを平滑化する場合 は、ヒットする点は平滑化された曲線に対する線分の上にあります。それが平 滑化しないデータに対する対象点よりも精度が良いか悪いかは、平滑化の当て はめの質に依存します。 精度: 線分が関数描画で生成されたものであれば、f(x) = y となる x の値は 2 分反復法で見つけます。それ以外の場合は、その線分に沿う線形補間で座標 [x,y] を近似します。 @menu * ウォッチマウス_(watch_mouse):: * ウォッチラベル_(watch_labels):: @end menu @node ウォッチマウス_(watch_mouse), ウォッチラベル_(watch_labels), ウォッチポイント_(Watchpoints)_, ウォッチポイント_(Watchpoints)_ @subsection ウォッチマウス (watch mouse) @c ?watchpoints mouse @c ?watch mouse 現在のマウス x 座標をウォッチ対象として使用すると、マウスの水平位置を 追跡しながら、グラフの線に沿って移動するラベルを生成します。これにより 同じグラフ上の複数の曲線の y の値を同時に表示することも可能です。現在 の位置を示す点とラベルの見た目は、`set style watchpoint` で変更できま す。 例: @example set style watchpoint labels point pt 6 ps 2 boxstyle 1 set style textbox 1 lw 0.5 opaque plot for [i=1:N] "file.dat" using 1:(column(i)) watch mouse @end example @node ウォッチラベル_(watch_labels), , ウォッチマウス_(watch_mouse), ウォッチポイント_(Watchpoints)_ @subsection ウォッチラベル (watch labels) @c ?watchpoint labels @c ?watch labels デフォルトではラベルは、対象 "watch mouse" に対して常に生成します。他 の対象に対しても、コマンド @ref{labels} を使えばラベ ルをオンにできます。ラベル文字列は "x : y" で、x, y は対象点の座標、そ の書式化は対応する軸に対する現在の設定を使用します。 例: @example set y2tics format "%.2f" set style watchpoint labels point pt 6 plot FOO axes x1y2 watch mouse @end example @node 描画スタイル_(Plotting_styles), コマンド_(Commands), Gnuplot, Top @chapter 描画スタイル (Plotting styles) @c ?plotting styles @cindex plot styles gnuplot では、たくさんの描画スタイルが利用できます。 それらは、アルファベット順に以下に紹介されています。 コマンド `set style data` と `set style function` は、それ以降の `plot` や `splot` コマンドに対してデフォルトの描画スタイルを変更 します。 描画スタイルは、コマンド `plot` や `splot` の一部分として、明示的にオ プション指定することもできます。一つの描画の中で、複数の描画スタイルを 組み合わせたい場合は、各要素に対して描画スタイルを指定する必要がありま す。 例: @example plot 'data' with boxes, sin(x) with lines @end example 各描画スタイルは、それ自体がデータファイルからのいくつかのデータの組 を期待します。例えば、デフォルトでは `lines` スタイルは、y の値だけの 1 列のデータ (x の値は暗黙に順番に取られる)、または最初が x, 次が y の 2 つの列を期待しています。ファイルの何列のデータを描画データと解釈させ るうまい方法に関する情報については、以下参照: `using`。 @menu * arrows:: * ビースウォーム描画_(Bee_swarm_plots):: * boxerrorbars:: * boxes:: * boxplot:: * boxxyerror:: * candlesticks:: * circles:: * contourfill:: * dots:: * ellipses:: * filledcurves:: * financebars:: * fillsteps:: * fsteps:: * histeps:: * 温度分布図_(heatmaps):: * histograms:: * hsteps:: * image:: * impulses:: * labels:: * lines:: * linespoints:: * マスキング_(masking):: * parallelaxes:: * 極座標描画_(Polar_plots):: * points:: * polygons:: * rgbalpha:: * rgbimage:: * 扇片_(sectors):: * spiderplot:: * steps:: * surface:: * vectors:: * xerrorbars:: * xyerrorbars:: * xerrorlines:: * xyerrorlines:: * yerrorbars:: * yerrorlines:: * 3_次元描画_(3D_plots):: * 柵グラフ_(Fence_plots):: * ボクセルデータのモザイク型曲面_(isosurface):: * 3_次元での曲線間の塗り潰し_(zerrorfill):: * アニメーション_(Animation):: @end menu @node arrows, ビースウォーム描画_(Bee_swarm_plots), 描画スタイル_(Plotting_styles), 描画スタイル_(Plotting_styles) @section arrows @c ?plotting styles arrows @c ?style arrows @c ?with arrows @cindex arrows @c ^figure_vectors 2 次元のスタイル `arrows` は、各点 (x,y) に長さと方向の角を指定して矢 印を描きます。追加の入力列は、各データ点毎の variable color 情報、ある いは arrow style として使用します。 これは、矢先の場所の指定方法以外は 2 次元描画スタイルの @ref{vectors} と同じで、矢先は delta_x + delta_y でなく length (長さ) + angle (角) で与えます。以下参照: @ref{vectors}。 @example 4 列: x y length angle @end example キーワード `with arrows` の後ろには、直接 arrow style 属性を指定したり 定義済みの arrow style 番号を指定、または `arrowstyle variable` による 各矢印毎に適用したい arrow style 番号を他の列から読み込ませることの指 定、などを追加できます。 正の `length` 値は、x 軸の座標で解釈します。 -1 < `length` < 0 の値は、水平グラフ座標、すなわち |length| を全体のグ ラフ幅に対する割合として解釈します。 gnuplot は x と y の拡大率の差、または描画アスペクト比に関して調整して、 見た目の長さが方向角とは独立であるようにしようとします。 `angle` は常に度単位で指定します。 @menu * arrowstyle_variable:: @end menu @node arrowstyle_variable, , arrows, arrows @subsection arrowstyle variable @c ?arrowstyle variable @c ?variable arrowstyle 描画スタイル `with arrows` と @ref{vectors} で、入力データの追加列を 与えて、事前に `set style arrow` で定義した arrow スタイルに対応するス タイル番号を指定することができます。 例: @example set style arrow 1 head nofilled linecolor "blue" linewidth 0.5 set style arrow 2 head filled linecolor "red" linewidth 1.0 # 第 5 列の値は 1 か 2 のいずれかで、それが事前に定義したスタイル # のうち使用する方を決定する plot DATA using 1:2:3:4:5 with arrows arrowstyle variable @end example @node ビースウォーム描画_(Bee_swarm_plots), boxerrorbars, arrows, 描画スタイル_(Plotting_styles) @section ビースウォーム描画 (Bee swarm plots) @cindex beeswarm @c ?bee swarm @cindex jitter @opindex jitter ビースウォーム (bee swarm) グラフは、揺らぎ (jitter) を適用して重複点 を分離することにより得られる結果です。その典型的な例は、各点に x 座標 を決定する 2 つ以上のカテゴリによって表わされる y の値の分布の比較です。 重なりの判定基準や、jitter で使用する移動パターンを制御する方法に関し ては、以下参照: @ref{jitter}。この図のグラフは、異なる jitter の設定に 対する同じ plot コマンドによって作られたものです。 @example set jitter plot $data using 1:2:1 with points lc variable @end example @node boxerrorbars, boxes, ビースウォーム描画_(Bee_swarm_plots), 描画スタイル_(Plotting_styles) @section boxerrorbars @c ?plotting styles boxerrorbars @c ?style boxerrorbars @c ?with boxerrorbars @cindex boxerrorbars 描画スタイル @ref{boxerrorbars} は 2 次元のデータ描画でのみ利用可能です。 これは、3 列、または 4 列、または 5 列のデータが必要です。入力列を追加 (4,5,6 列目) すると、それらは各データ点毎の variable color 情報 (以下 参照: `linecolor`, `rgbcolor variable`) として使われます。 @example 3 列: x y ydelta 4 列: x y ylow yhigh (xdelta <= 0 は boxwidth を使用) 5 列: x y ylow yhigh xdelta (xdelta <= 0 は boxwidth を使用) @end example y の誤差を "ydelta" の形式で与える場合は、箱の横幅は 4 列目の値を使用 し、"ylow yhigh" の形式で与える場合は、横幅は 5 列目の値を使用します。 xdelta の値が 0 かまたは負の場合は、箱の横幅は、事前に与える boxwidth の値で制御します。以下参照: `set boxwidth`。 誤差線の垂直方向は、@ref{yerrorbars} スタイル同様に y の誤差の値を表現する ように描きます。y-ydelta から y+ydelta まで、あるいは ylow から yhigh まで、これらは何列のデータが与えられているかによって決まります。誤差線 の描画で使用する線スタイルは、`set bars` を使って制御できますが、使わ なければ、箱の境界と同じもので誤差線を描きます。 非推奨: 古いバージョンの gnuplot では、"ylow yhigh" の誤差形式の 4 列 のデータに対して `boxwidth = -2.0` を特別に扱っていました。その場合、 隣接する箱の間に隙間ができないように箱の幅を調節していました。この処理 は、後方互換性のために残されていますが、将来のバージョンでは削除するで しょう。 @node boxes, boxplot, boxerrorbars, 描画スタイル_(Plotting_styles) @section boxes @c ?plotting styles boxes @c ?style boxes @c ?with boxes @cindex boxes 2 次元グラフでは、スタイル @ref{boxes} は与えられた x 座標を中心とし、x 軸 から (すなわち y=0 からであって、グラフの境界からではない) 与えられた y 座標まで伸ばした長方形の箱を書きます。箱の横幅は入力の追加列で指定す ることもできますし、`set boxwidth` で制御することもできます。そうでな ければ、各箱は、隣接する箱同士がくっつくように引き伸ばされます。 3 次元グラフでは、スタイル @ref{boxes} は与えられた x, y 座標を中心とし、 xy 平面 (z=0) から与えられた z 座標まで伸ばした直方体の箱を書きます。 x 方向の箱の幅は、別の入力列か `set boxwidth` で指定でき、y 方向の箱の 奥行きは、`set boxdepth` で制御できます。箱は、2 次元グラフのように、 自動的にはくっつくように引き伸ばされません。 @menu * 2_次元の_boxes_(2D_boxes):: * 3_次元の_boxes_(3D_boxes):: @end menu @node 2_次元の_boxes_(2D_boxes), 3_次元の_boxes_(3D_boxes), boxes, boxes @subsection 2 次元の boxes (2D boxes) @c ?style boxes 2D @c ?boxes 2D @ref{boxes} は、基本的に 2 列、または 3 列のデータを使用します。 さらに入力列を追加すると、それは、可変線色 (variable line color) や塗 り潰し色の情報として使用します。以下参照: `rgbcolor variable`。 @example 2 列: x y 3 列: x y x_width @end example 箱の幅は 3 つのうち一つの方法で決定されます。入力データに 3 列目のデー タがある場合は、それを箱の幅として使用します。そうでない場合でコマンド `set boxwidth` で箱の幅をセットした場合は、それを使います。そのどちら でもない場合は、隣接する箱がくっつくように箱の幅を自動的に計算します。 箱の内部は現在の塗りつぶしスタイル (fillstyle) で塗りつぶします。それ 以外に、塗りつぶしスタイルを plot コマンド上で指定することもできます。 以下参照: `set style fill`。 塗り潰し色を plot コマンドで指定しなければ、現在の線色を使用します。 例: データファイルを単色塗りした箱で描画し、箱同士を少し垂直方向にスペース を空ける (棒グラフ): @example set boxwidth 0.9 relative set style fill solid 1.0 plot 'file.dat' with boxes @end example 塗り色を明示してパターン塗りスタイルの箱で sin と cos のグラフを描画: @example set style fill pattern plot sin(x) with boxes fc 'blue', cos(x) with boxes fc 'gold' @end example sin はパターン 0 で、cos はパターン 1 で描画されます。追加される描画は 出力ドライバがサポートするパターンを循環的に使用します。 @node 3_次元の_boxes_(3D_boxes), , 2_次元の_boxes_(2D_boxes), boxes @subsection 3 次元の boxes (3D boxes) @c ?style boxes 3D @c ?boxes 3D @ref{boxes} には、少なくとも 3 列の入力列が必要です。さらに入力 列を追加すると、それは箱の幅や塗り潰し色の情報として使用します。 @example 3 列: x y z 4 列: x y z [x_width または color] 5 列: x y z x_width color @end example 最後の列は、splot コマンドで明示的に variable カラーモードを指定してい る場合のみ色として使用します。例: @example splot 'blue_boxes.dat' using 1:2:3 fc "blue" splot 'rgb_boxes.dat' using 1:2:3:4 fc rgb variable splot 'category_boxes.dat' using 1:2:3:4:5 lc variable @end example 最初の例は、すべての箱を青に塗り、幅はあらかじめ `set boxwidth` で設定 した幅を使用します。2 つ目の例は、4 列目を 24-bit RGB 色として認識する ため、箱の幅は相変わらず `set boxwidth` の幅を使います。3 つ目の例は、 4 列目の値を箱の幅として読み、5 列目の整数値を色を提供する線種と解釈し ます。 デフォルトでは、箱には太さはなく、それらは単に xz 平面に平行な 1 つの 長方形で構成されますが、y 方向の幅として 0 でない値を設定すれば 4 面と 天井をを持つ本当の箱に変更できます。以下参照: `set boxdepth`。 3 次元の箱は、曲面ではなく pm3d 長方形として処理しています。よって、表 裏の描画順は、`set hidden3d` の影響を受けません。以下参照: `set pm3d`。 gnuplot バージョン 6 は、箱の端はグラフの fill style の境界色で色付け します。これはバージョン 5 とは異なる変更です。 最良の結果を得るには、`set pm3d depthorder base` と `set pm3d lighting` を組み合わせてください。 @node boxplot, boxxyerror, boxes, 描画スタイル_(Plotting_styles) @section boxplot @c ?plotting styles boxplot @c ?style boxplot @c ?with boxplot @cindex boxplot boxplot は、値の統計的な分布を表現する一般的な方法です。四分位境界は、 1/4 の点が第一四分位境界以下の値を持つように、1/2 の点が第二四分位境界 (メジアン) 以下の値を持つように、等と決定されます。第一四分位と第三四 分位の間の領域を囲むように箱を描画し、メジアン値のところには水平線を描 きます。箱ひげは、箱からユーザ指定限界まで延長されます。それらの限界の 外にある点は、ひとつひとつ描画されます。y の値が重なる範囲外の点の水平 の広がりは、@ref{jitter} で調整できます。 例: @example # x 座標は 1.0、y は 5 列目の値のところに boxplot を配置 plot 'data' using (1.0):5 @end example @example # 上と同じだが、範囲外の点は隠し、boxplot の幅を 0.3 にする set style boxplot nooutliers plot 'data' using (1.0):5:(0.3) @end example デフォルトでは、using 指定による 2 列目の y のすべての値に対する boxplot を 1 つだけ生成します。しかし、追加の (4 つ目の) 列を指定する と、その列の値をある因子変数の離散的なレベル値であると見なし、その離散 値のレベルの値の数だけの boxplot を描画します。それらの boxplot の間隔 はデフォルトでは 1.0 ですが、これは `set style boxplot separation` で 変更できます。デフォルトでは、因子変数の値は、各 boxplot の下 (または 上) の目盛りのラベルに表示します。 例 @example # 'data' の 2 列目は "control" か "treatment" のいずれかの文字列で # 以下の例は、その因子毎の 2 つの boxplot を生成する plot 'data' using (1.0):5:(0):2 @end example その箱のデフォルトの幅は `set boxwidth ` で設定できますが、plot コマンドの `using` による 3 番目のオプション列でも指定できます。1 番目 と 3 番目の列 (x 座標と幅) は通常データ列ではなく定数として与えます。 デフォルトでは、箱ひげは箱の端から、y の値が四分位範囲の 1.5 倍の中に 収まっていて最も離れているような点まで延長します。デフォルトでは、範囲 外の点 (outlier) は円 (pointtype 7) で描きます。箱ひげの端の棒の幅は `set bars` または `set errorbars` を使って制御できます。 これらのデフォルトの性質は `set style boxplot` コマンドで変更できます。 以下参照: `set style boxplot`, `bars`, `boxwidth`, `fillstyle`, @ref{candlesticks}。 @node boxxyerror, candlesticks, boxplot, 描画スタイル_(Plotting_styles) @section boxxyerror @c ?plotting styles boxxyerror @c ?style boxxyerror @c ?with boxxyerror @cindex boxxyerror @ref{boxxyerror} 描画スタイルは 2 次元のデータ描画でのみ利用可能です。これ は、@ref{xyerrorbars} スタイルが線分の交差で表現するところを長方形で表現す ることを除けばほぼ同じです。これは入力データの 4 列、または 6 列を使用 します。余分な入力列 (5 列目、または 7 列目) は、データ点毎の可変色 (variable color) 情報の提供として扱います (以下参照: `linecolor`, `rgbcolor variable`)。 @example 4 列: x y xdelta ydelta 6 列: x y xlow xhigh ylow yhigh @end example 箱の幅と高さは @ref{xyerrorbars} スタイル同様 x, y の誤差から決定されます つまり、xlow から xhigh までと ylow から yhigh まで、または x-xdelta から x+xdelta までと y-ydelta から y+ydelta まで。これらは何列のデータ が与えられているかによって決まります。 6 列の形式のコマンドは、任意の x, y の幅の長方形を書く簡単な方法を提供 します。 箱の内部は現在の塗りつぶしスタイル (fillstyle) に従って塗られます。詳 細は、以下参照: `set style fill`, @ref{boxes}。plot コマンド上で新しい塗り つぶしスタイルを指定することもできます。 @node candlesticks, circles, boxxyerror, 描画スタイル_(Plotting_styles) @section candlesticks @c ?plotting styles candlesticks @c ?style candlesticks @c ?with candlesticks @cindex candlesticks @ref{candlesticks} スタイルは、金融データの 2 次元のデータ描画、および統計 データのひげ付きの棒グラフを生成するのに使えます。 記号は、水平方向には x を中心とし、垂直方向には開始値 (open) と終値 (close) を境界とする長方形が使われます。そして、その x 座標のところに 長方形のてっぺんから最高値 (high) までと、長方形の底から最安値 (low) までの垂直線が引かれますが、この垂直線は最高値と最安値が入れ替わっても 変更されません。 基本的に 5 列のデータが必要です: @example 金融データ: date open low high close 箱ひげ描画: x box_min whisker_min whisker_high box_high @end example 長方形の幅はコマンド `set boxwidth` で制御できますが、以前の gnuplot への後方互換性として、boxwidth パラメータが設定されていない場合は `set errorbars ` を長方形の幅として取ります。 これの代わりに、箱ひげ (box-and-whisker) のグループ化に関する明示的な 幅の指定を、追加の 6 番目のデータで指定できます。その幅は、x 座標と同 じ単位で与えなければいけません。 入力列を追加 (6 列目、または 6 列目がデータの幅として使れる場合は 7 列 目) すると、それらは各データ点毎の variable color 情報 (以下参照: `linecolor`, `rgbcolor variable`) として使われます。 デフォルトでは、鉛直線分のてっぺんと底には垂直に交わる水平線は引かれま せん。それを引きたい場合、例えば典型的な例は箱ひげ図 (box-and-whisker plot) での使用ですが、描画コマンドにキーワード `whiskerbars` を追加し てください。デフォルトでは、水平線は箱 (candlestick) の水平幅一杯に引 かれますが、それは全体の幅に対する割合を指定することで変更できます。 金融データの通常の慣習では、(開始値) < (終値) の場合は長方形は空で、 (終値) < (開始値) の場合は単色塗りします。現在の fillstyle に "empty" をセットしている場合は、実際にこうなります。以下参照: `fillstyle`。 fillstyle に solid (単色塗り)、または pattern (パターン) をセットして いる場合は、開始値、終値に関係なく、すべての箱にそれが使われます。以下 参照: `set errorbars`, @ref{financebars}。また、以下も参照してください。 @uref{http://www.gnuplot.info/demo/candlesticks.html,candlestick } と @uref{http://www.gnuplot.info/demo/finance.html,finance } のデモ。 注意: 箱ひげグラフ上に記号や線を追加して置くには、追加の描画要素が必要 になります。以下の最初の例は、2 番目の要素で、箱を潰して中央値の場所に 置く線分にしています。 @example # データ列: X '最小値' '1/4 位の値' '中央値' '3/4 位の値' '最大値' set errorbars 4.0 set style fill empty plot 'stat.dat' using 1:3:2:6:5 with candlesticks title 'Quartiles', \ '' using 1:4:4:4:4 with candlesticks lt -1 notitle @end example @example # ひげの上に水平線を伴う描画で、水平線の幅を全体幅の 50% にする plot 'stat.dat' using 1:3:2:6:5 with candlesticks whiskerbars 0.5 @end example 以下参照: `set boxwidth`, `set errorbars`, `set style fill`, `boxplot`。 @node circles, contourfill, candlesticks, 描画スタイル_(Plotting_styles) @section circles @c ?plotting styles circles @c ?style circles @c ?with circles @cindex circles スタイル @ref{circles} は、各データ点に明示された半径の円を描画します。半 径は、常に描画の水平軸 (x または x2) の単位で解釈されます。y 方向の縮 尺と描画のアスペクト比は、いずれも無視されます。半径を各点毎の列として 指定しない場合、それは `set style circle` から取ります。この場合、半径 は graph か screen の座標系を使用できます。 各点毎に、そして事前に、設定する属性の多くの組み合わせ指定が可能です。 2 次元描画では、以下が指定できます。 @example using x:y using x:y:radius using x:y:color using x:y:radius:color using x:y:radius:arc_begin:arc_end using x:y:radius:arc_begin:arc_end:color @end example デフォルトでは完全な円を描画します。 この結果は @ref{points} と pointtype 7 を用いて、可変点サイズのグラフを書 くことと同様ですが、その円を x 軸の範囲で伸縮すことが違います。 4 列目、5 列目に開始角と終了角 (単位は度)を指定することで円弧の一部を 描画することもできます。 using 指定の最後の列で、円毎の色も指定できます。この場合、plot コマン ドには `lc variable` か `fillcolor rgb variable` のような変動色指定を 入れる必要があります。 以下参照: `set style circle`, `set object circle`, `set style fill`。 3 次元描画では、using 指定には以下のものが必要です。 @example splot DATA using x:y:z:radius:color @end example 変動色の列はオプション (省略可) です。 例: @example # 面積が 3 列目の値に比例するような円を描画 set style fill transparent solid 0.2 noborder plot 'data' using 1:2:(sqrt($3)) with circles, \ 'data' using 1:2 with linespoints @end example @example # 円の代わりにパックマンを描画 plot 'data' using 1:2:(10):(40):(320) with circles @end example @cindex piechart @example # インランデータで円グラフを描画 set xrange [-15:15] set style fill transparent solid 0.9 noborder plot '-' using 1:2:3:4:5:6 with circles lc var 0 0 5 0 30 1 0 0 5 30 70 2 0 0 5 70 120 3 0 0 5 120 230 4 0 0 5 230 360 5 e @end example @node contourfill, dots, circles, 描画スタイル_(Plotting_styles) @section contourfill @c ?plotting styles contourfill @c ?style contourfill @c ?with contourfill @cindex contourfill 書式: @example splot f(x,y) with contourfill @{at base@} @{fillstyle