名称 rrdtool graph - 1つもしくは複数のRRDを元にグラフを生成します。 ------------------------------------------------------------------------------- 書式(訳注:見やすさのため適宣改行しています) rrdtool graph ファイル名 [ -s | --start 開始時刻 ] [ -e | --end 終了時刻 ] [ -x | --x-grid 横軸設定 ] [ -y | --y-grid グリッド:ラベル ] [ --alt-y-grid ] [ --alt-y-mrtg ] [ --alt-autoscale ] [ --alt-autoscale-max ] [ --units-exponent 指数 ] [ -v | --vertical-label ラベル ] [ -w | --width 幅 ] [ -h | --height 高さ ] [ -i | --interlaced ] [ -f | --imginfo フォーマット ] [ -a | --imgformat GIF|PNG|GD ] [ -B | --background 画像 ] [ -O | --overlay 画像 ] [ -U | --unit 単位 ] [ -z | --lazy ] [ -o | --logarithmic ] [ -u | --upper-limit 上限 ] [ -l | --lower-limit 下限 ] [ -g | --no-legend ] [ -r | --rigid ] [ --step ステップ ] [ -b | --base 底 ] [ -c | --color 色タグ#色 ] [ -t | --title タイトル ] [ DEF:仮想名=データベース名:データソース名:統合関数 ] [ CDEF:仮想名=式 ] [ PRINT:仮想名:統合関数:フォーマット ] [ GPRINT:仮想名:統合関数:フォーマット ] [ COMMENT:コメント ] [ HRULE:値#色[:凡例] ] [ VRULE:時刻#色[:凡例] ] [ LINE{1|2|3}:仮想名[#色[:凡例]] ] [ AREA:仮想名[#色[:凡例]] ] [ STACK:仮想名[#色[:凡例]] ] ------------------------------------------------------------------------------- 解説 graph機能の主用途は1つもしくは複数のRRDに格納されたデータのグラフィカルな 表現を生成することです。データの統計値を出力することもできます。 ファイル名: 生成される画像ファイル名。rrdtoolはGIFもしくはPNGで出力しますので これらの拡張子をつけたほうがいいでしょう。ファイル名として「-」を与えた 場合は標準出力に画像を出力し、そのほかの出力を行いません。 画像形式にはPNGを使うことをお勧めします。PNGならGIFよりファイルサイズを40% 小さくできますし生成に要する時間も20〜30%ほど短くてすみます。 graph機能を使うまでグラフは生成されません。 -s| --start 開始時刻 (デフォルトは1日前) 作成するグラフの開始時間です。時間は紀元(1970/01/01/-00:00:00 GMT)からの 経過秒数形式で表し、負の値は現在から何秒遡るかを示します。デフォルトでは 1日分のデータがグラフ化されます。詳細な時刻の指定法についてはrrdfetch マニュアルの「AT形式時刻指定法」も参照してください -e| --end 終了時刻 (デフォルトは現在) 作成するグラフの終了時刻です。紀元からの経過秒数形式で指定します。 詳細な時刻の指定法についてはrrdfetchマニュアルの「AT形式時刻指定法」も 参照してください -x | --x-grid 横軸設定 (デフォルトは自動設定) 横軸の設定はかなり複雑になっています。なので、特別な理由がないなら 自動設定に頼ったほうがよいでしょう。 もし横軸のグリッド(訳注:グラフ内での縦線)を表示したくないのであれば 特殊設定である「none」を使ってください。 横軸設定は以下のようなフォーマットになっています。 副種:副幅:主種:主幅:札種:札幅:精度:書式 これで横軸およびラベルを構成する3つの要素を設定します。「副」で始まるものは 副線となるグリッドを、「主」で始まるものは主線となるグリッドを、 そして「札」で始まるものはラベルを設定します。ここでの設定は、まず、 「種」で終わる項目で基本となる時間単位を指定し、「幅」で終わる項目で その時間単位の何倍をグリッドおよびラベルの間隔とするかを指定するという やり方で行います。ラベルについてはもう2つ項目があります。ラベルの精度を 秒数で指定する「精度」とラベルの文字列を生成するのに用いられるstrftime 形式の「書式」です。 「種」で終わる項目には以下のいずれかの文字列を指定しなければいけません。 SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR もし、副線を10分間隔、主線を1時間間隔、ラベルも1時間間隔、としたいので あれば次のようになります MINUTE:10:HOUR:1:HOUR:1:0:%X この例では「精度」は0になっています。これは「%X」が正確を要する書式だから です。もしラベルが曜日ならば「精度」は24時間にすることができます。 なぜなら「月曜」と言った場合その日1日中を指すのであって、月曜の午前0時 0分を指すわけではないからです。またこの場合ラベルは正午の位置にあるのが 適切ですが、「精度」を24時間、つまり86400秒にすればちょうどそうなります。 ラベルに別の言語を使いたい場合は、「graph」を呼び出すときに「LC_TIME」 環境変数を設定してください。 (訳注) strftime形式の書式 %A 曜日の名称(Sunday, Monday...) %a 曜日の省略名(Sun, Mon...) %B 月の名称(January, February...) %b 月の省略名(Jan, Feb...) %c 日付と時刻 %d 日(01-31) %H 24時間制の時(00-23) %I 12時間制の時(01-12) %j 年中の通算日(001-366) %M 分(00-59) %m 月を表す数字(01-12) %p 午前または午後(AM,PM) %S 秒(00-60) %U 週を表す数.最初の日曜日が第1週の始まり(00-53) %W 週を表す数.最初の月曜日が第1週の始まり(00-53) %w 曜日を表す数.日曜日が0(0-6) %X 時刻 %x 日付 %Y 西暦を表す数 %y 西暦の下2桁(00-99) %Z タイムゾーン %% %自身 -y | --y-grid グリッド:ラベル (デフォルトは自動設定) 「グリッド」の倍数ごとに副線となるグリッドを、「グリッド」×「ラベル」の 倍数ごとに主線となるグリッドとその値を示すラベルを表示します。 縦軸のグリッド(訳注:グラフ内の横線)を無くしたい場合は特殊設定である 「none」を設定してください。 --alt-y-grid 縦軸の範囲を元に縦軸のグリッドを動的に配置します。このアルゴリズムでは 常に必要十分な量のグリッドが表示されることが保障され、また計量的な値に 配置されます。つまりグリッドは1,2,5,10を単位として配置されます。 --alt-y-mrtg 縦軸のグリッドを(「rateup」が生成する)MRTGのグラフのようにします。 今の所「rateup」のように軸を4つの部分に分割します。 --alt-autoscale グラフ内のデータの最小値と最大値に基づいて縦軸の範囲を計算します。 (訳注:このオプションがOFFの場合の)デフォルトのアルゴリズムでは、 あらかじめ定義された範囲の集合を用いて算出します。これはたいていは うまく働くのですが、260 + 0.001 * sin(x) のようなグラフを書く場合には うまくいきません。この場合、デフォルトのアルゴリズムは縦軸の範囲として 250〜300を用いてしまい、グラフはほとんど直線になってしまいます。 --alt-autoscaleオプションを使えば 260 - 0.001 より少し小さい値から 260 + 0.001 より少し大きい値までが縦軸の範囲として使われ、予想通りの グラフが表示されます。 --alt-autoscale-max --alt-autoscaleは最大値も最小値も変更しますが、このオプションは最大値のみを 変更します。最小値がコマンドラインオプションで指定されていない場合は 0になります。このオプションはWAN回線が圧縮を使っているためにWANの回線 スピードよりもスループットのほうが大きいようなルーターのトラフィックを グラフにする場合に有用です。 --units-exponent 指数 (デフォルトでは自動設定) 縦軸の値を10の累乗値で拡大縮小します。通常、縦軸の値は適当な単位に 調整されます(k,Mなど)。しかし、例えば値はM(メガ 10^6)の範囲だけれども常に k(キロ 10^3)で表示したいような時があるでしょう。「指数」は-18から18までの 間の3の倍数でなければなりません。これは表示したい単位の指数となります。 例えば 3 なら縦軸の値は k(キロ 10^3) で、 -6 なら縦軸の値は u(マイクロ 10^-6) で表示されます。「指数」に 0 を指定することで縦軸の値には いかなる単位もつかないようになります -v | --vertical-label ラベル グラフの左側に表示される縦方向のラベルです。通常単位を表示するのに 用いられます。 -w | --width 幅 (デフォルトでは400ピクセル) 画像内のグラフ領域の幅です。 (訳注:生成される画像の幅はこれよりも大きくなる) -h | --height 高さ (デフォルトでは100ピクセル) 画像内のグラフ領域の高さです。 (訳注:生成される画像の高さはこれよりも大きくなる) -i | --interlaced (デフォルトではオフ) このオプションを設定するとインターレース画像を生成します。 多くのブラウザではインターレース画像は読み込まれるにしたがって徐々に 表示されます。このオプションを使用しない場合、生成される画像は プログレッシブ画像になります。このオプションは生成される画像の フォーマットを変更するだけで、生成されるグラフのレイアウトには一切 影響しません。 -f | --imginfo フォーマット 画像が生成された後、「フォーマット」をprintfの書式としてPRINTのように 文字列を生成し出力します。printfから渡されるパラメータは「ファイル名」 「画像の幅」「画像の高さ」のみです。グラフをwebページに組み込むのに 適したIMGタグを生成する場合、以下のようになります。 --imginfo 'Demo' -a | --imgformat GIF|PNG|GD (デフォルトはGIF) rrdtoolではPNGもしくはGD形式の出力もできます。 -B | --background 画像 (今の所)GD形式の場合(のみ)、画像を背景として使うことができます。 この画像はグラフ生成のかなり初期の段階で背景として使われます。 -O | --overlay 画像 (今の所)GD形式の場合(のみ)、画像を前景として使うことができます。 白(#FFFFFF)を透過色とみなして生成されたグラフに画像をかぶせます。 白以外のピクセルはその画像の色となります。 -U | --unit 単位 縦軸に表示する単位を指定します。単位の文字列は短くしたほうがよいでしょう。 (訳注:動作しない・・・?) -z | --lazy (デフォルトではoff) 現在の画像が、存在しないか、期限切れの場合のみ画像を生成します。 -o | --logarithmic 縦方向を対数目盛りにします。 -u | --upper-limit 上限 (デフォルトは自動設定) グラフの上限値を指定します。グラフ内にこの値以上の点がある場合、 その点が表示されるように境界線は上へ移動されます。 上限値を移動してほしくない場合は --rigid オプションを設定する必要が あります。 -l | --lower-limit 下限 (デフォルトは自動設定) これはグラフの下限を指定するのではなく、下限の最大値を指定します。例えば -100 が指定された場合、実際のグラフの下限は -100 以下になります。 グラフを下方向に伸ばしたい場合にこのオプションを使ってください。 -g | --no-legend 凡例を描画せずグラフのみを描画します。 -r | --rigid 固定範囲モード。通常、rrdgraph はグラフ外となってしまう点がある場合 自動的に上限や下限を拡張しますが、このオプションはそのような動作を 行わないようにします。 --step ステップ (デフォルトは自動設定) rrdgraph はデフォルトでは1ピクセルに対応する時間幅を計算しその時間解像度で RRDからのデータ取得を試みます。このオプションはその動作を変更することが できます。データの取得を1時間幅で行ってほしいのであれば「ステップ」に3600を 指定すればよいのです。 注:1ピクセルに対応する時間幅より小さい「ステップ」は無視されます。 -b | --base 底 (トラフィックに関するグラフではなく)メモリーに関するグラフを作成する場合 「底」に 1024 を指定することで 1kB = 1024 B となるようにすることが できます。トラフィックの測定には 1kB/s = 1000 b/s を用います。 -c | --color 色タグ#色 グラフの基本要素の色を変更します。「色タグ」は次の文字列のいずれかで なければなりません。BACK 背景、CANVAS 描画領域、SHADEA 左と上の境界線、 SHADEB 右と下の境界線、GRID グリッドの副線、MGRID グリッドの主線、 FONT 文字、FRAME グラフの軸と枠、ARROW 矢印。複数の要素の色を変更するために 複数回このオプションを記述することができます。 -t | --title タイトル (デフォルトはタイトルなし) グラフに書き込まれるタイトルを指定します。 DEF:仮想名=データベース名:データソース名:統合関数 データソースに対して仮想名を定義します。仮想名は下で述べる機能を 利用するのに用います。このDEF定義は作成されるグラフの大きさに適した 時間解像度をもち、かつ「統合関数」で統合されたデータを含むRRAを自動的に 選択します。つまり、RRA内のある1つのデータはグラフ上のある1点により 表されるということです。自動選択されたRRAの持つ時間解像度が、グラフの それよりも高い場合、RRA内のデータをさらに「統合関数」によって統合した データが用いられます。 CDEF:仮想名=式 逆ポーランド記法(RPN)で表現された数式に基づいて、新しい仮想データソースを 作成します。昔のHPの計算機を使ったことがあるなら既にRPNを知っている でしょう。RPNでの考え方は、まずスタックがあってそれにいくつかのデータを プッシュします。そして、演算子を適用するときは必要な分のデータを スタックからポップして使います。データのプッシュは暗黙のうちに行われます ので数値か変数を指定するだけで自動的にプッシュされます。 上の文章がまったく理解できないならば、次の例が理解の助けとなるでしょう (より完全な説明は[1]にあります。)。式 vname+3/2 はRPNでは vname,3,2,/,+ と なります。最初に3つの値がスタックにプッシュされます(スタックにはvname (の現在の値)と3と2があることになります)。次に/演算子が2つの値(3と2)を ポップし1つ目の引数を2つ目の引数で割って(3÷2)、その結果(1.5)をスタックに プッシュします。そして+演算子が2つの値(vnameと1.5)をスタックからポップし それらを足して、結果をスタックにプッシュします。最後には1つの値、 つまり式の結果がスタックに残ります。 CDEF定義での「式」には値として定数と仮想名が使えます。また、以下の演算子が 利用できます。 +, -, *, /, %: スタックから2つの値を取り出し演算結果をスタックに戻します。 % は剰余演算子です。 SIN, COS, LOG, EXP, FLOOR, CEIL: スタックから1つの値を取り出し演算結果をスタックに戻します。 LT, LE, GT, GE, EQ: スタックから2つの値を取り出しそれらを比較します。 比較が真なら1を、偽なら0をスタックにプッシュします。 IF スタックから3つの値を取り出し、最後の値が0でなければ2つ目の値を、 そうでなければ1つ目の値をスタックにプッシュします 今、スタックに A,B,C,D,E があるとすると、IF 演算子は E,D,C を スタックからとりだします。そしてCが0でないならDをそうでないならEを スタックにプッシュします。 MIN, MAX スタックの上から2つのうち小さい方、もしくは大きい方を選びます。 LIMIT (訳注:スタックの上から3番目のデータの中で)スタックの上2つの値で 指定される範囲を超える値を *UNKNOWN* で置き換えます。 CDEF:a=alpha,0,100,LIMIT (訳注:alphaに含まれるデータのうち0〜100以外のデータを*UNKNOWN*に 置き換えたデータをaと定義します) DUP, EXC, POP これらはスタックを直接操作します。DUPはスタックの一番上の値をコピーし それをスタックにプッシュします。EXCはスタックの上2つを交換します。 POPはスタックの一番上の値をポップして捨てます。スタックに十分な 要素がない場合これらの演算子はエラーとなります。 UN スタックから1つの値を取り出し、それが*UNKNOWN*なら1を、そうでなければ 0をプッシュします。 UNKN *UNKNOWN*をスタックにプッシュします。 PREV 時間軸で最初のデータを計算するときは*UNKNOWN*を、それ以降の計算時には 1つ前の時間に対するこのCDEF定義の計算結果を、プッシュします。 これはデータ全体にわたって計算を行えるようにします。 PREV(仮想名) 時間軸で最初のデータを計算するときは*UNKNOWN*を、それ以降の計算時には CDEFで定義された「仮想名」の1つ前の時間に対する計算結果を、 プッシュします。これはデータ全体にわたって複雑な計算を行えるように します。 INF, NEGINF 正または負の無限大をスタックにプッシュします。無限大値は正か負かに 応じて上向きまたは下向きの直角として描画されます。 NOW (現実世界の)現在の時刻をスタックにプッシュします TIME データの取得時刻をスタックにプッシュします。これは1970年1月1日の 0:00:00からの秒数です。 LTIME これは TIME + 現在のタイムゾーンのオフセット(秒) と同じようなものです。 OSがサポートしていればサマータイムも影響します。たとえば夏の チューリッヒではオフセットが 2*3600 秒となりUTCより2時間早くなります。 注:タイムゾーンのオフセットは各データの取得時刻ごとに算出されます。 計算するときにはほかに何もする必要はないのです。 仮想名変数はそれ以前のDEFもしくはCDEFで定義されたもののみが使えます。 またこれを書いている時点(バージョン 0.99.25)では「式」には少なくとも 1つの仮想名変数が必要です。「CDEF:fourtytwo=2,40,+」は仮想名fourtytwoは 常に42であるという事ですが、エラーとなります。 PRINT:仮想名:統合関数:フォーマット 仮想名のデータに統合関数を適用し、その値を「フォーマット」を用いてprintfで 標準出力に出力します。「フォーマット」には「%lf」指示子もしくは「%le」 指示子が数値を表示したい位置になければなりません。 オプションとして指示子の後に「%s」が見つかった場合、値は適切なSI指数単位で 調整され「%s」の位置にその指数単位が表示されます。この調整には 「--base」オプションが影響します。 「%s」の代わりに「%S」が用いられた場合、この値に対する適切なSI指数単位を 計算するのではなく前に計算されたSI指数単位が用いられます。これは全ての PRINTでの出力に同じSI指数単位を使いたい場合に有用です。以前に SI指数単位の計算が行われていない場合、値が0でないならば「%S」は「%s」と 同じ動作をします。値が0の場合はSI指数単位は記憶されず次の「%s」か値が 0でない「%S」の時にSI指数単位が計算されます。 PRINTで出力される文字列に「%」を使いたい場合は代わりに「%%」を 使ってください。 GPRINT:仮想名:統合関数:フォーマット PRINTと同じですが結果がグラフの凡例の下に書き込まれます。 COMMENT:コメント GPRINTと似ていますが単に「コメント」がグラフに書き込まれます。 警告:PRINTまたはGPRINTを用いて現在時刻を含む時間区間に対して計算を行う場合、 最終更新時刻より後の値は常にほとんどが*UNKNOWN*であることに注意してください。 特にAVERAGEを用いた場合に計算結果に小さなずれができます。これを避けるためには 終了時刻を少なくとも現在時刻より「最大間隔」秒前にしてください。 HRULE:値#色[:凡例] グラフに水平線を引き、オプションで凡例を追加します。 VRULE:時刻#色[:凡例] グラフに垂直線を引き、オプションで凡例を追加します。 LINE{1|2|3}:仮想名 #色 :凡例 指定されたデータを指定された色を使ってプロットします。オプションで凡例を 追加します。3つのキーワード LINE1、LINE2、LINE3 は数値が大きいほど 太い線を引きます。色が指定されない場合描画結果は表示されません。これは STACK を使って個々のグラフを表示せずに2つのデータソースの値を足した グラフを描画したい場合に便利です。 AREA:仮想名[#色[:凡例]] LINExと同じ事をしますが値0との間を指定した色で塗りつぶします。 STACK:仮想名[#色[:凡例]] LINExと同じ事をしますが直前のLINEx、AREA、STACKで描画されたグラフの上に 積み重ねられます。STACKで描画されるグラフがLINExになるかAREAになるかは 直前のグラフによります。これは最初のSTACKの前にAREAかLINExが必要だと いうことを意味します。(何かを積むには下に何かが必要だということです。) 注:*UNKNOWN*なデータにSTACKした場合 rrdtool はグラフを描画しません。 *UNKNOWN*は0ではないからです。0とみなしたい場合はCDEF定義でIFとUN演算子を 使って*UNKNOWN*を0に置き換えてください。 ------------------------------------------------------------------------------- 凡例に使用する文字列に関する注意 コロンのエスケープ 凡例文字列中の「:」は凡例の終了を意味しますので、「:」を使いたい場合は バックスラッシュを使って「\:」のようにエスケープする必要があります。多くの 環境ではバックスラッシュをメタ文字として扱いますからrrd graphに1つの バックスラッシュを渡すためには2つのバックスラッシュを書く必要が あるでしょう。 文字列の整形 グラフの下に表示される文字列は文字列の最後に特殊なメタ文字を加えることで 整形することができます。そのような文字が現れた場合は常に未描画の文字列が その文字に従ってグラフに描画されます。 使用可能な文字は、均等割付の\j、左寄せの\l、右寄せの\r、中央寄せの\cです。 次のセクションには中央寄せの使い方を示す例があります。 通常、グラフ内の2つの文字列の間には2つのスペースが挿入されます。 このスペースは文字列の最後に\gを書くことで挿入されないようにすることが できます。また\gは文字列の終わりにあるスペースも削除します。これは%sの後に 続けることで空の単位文字列を削除できます。 GPRINT:a:MAX:%lf%s\g 特別な場合として「COMMENT:\s」は凡例の次の行との行間を少し広くします。 ------------------------------------------------------------------------------ 返り値に関する注意 rrd graphは常に生成された画像の大きさを含む行を標準出力に出力します。 これは「幅x高さ」の形式になっています。 ------------------------------------------------------------------------------ 例1 rrdtool graph demo.gif --title="Demo Graph" \ DEF:cel=demo.rrd:exhaust:AVERAGE \ "CDEF:far=cel,1.8,*,32,+"" \ LINE2:cel#00a000:"D. Celsius" \ LINE2:far#ff0000:"D. Fahrenheit\c" ------------------------------------------------------------------------------- 例2 この例はIFとUNを使って*UNKNOWN*を0に置き換えるやり方を示しています。これは データの開始時刻が異なるいくつかのインターフェイスをまとめて表示する場合に 有用です。 rrdtool graph demo.gif --title="Demo Graph" \ DEF:idat1=interface1.rrd:ds0:AVERAGE \ DEF:idat2=interface2.rrd:ds0:AVERAGE \ DEF:odat1=interface1.rrd:ds1:AVERAGE \ DEF:odat2=interface2.rrd:ds1:AVERAGE \ CDEF:agginput=idat1,UN,0,idat1,IF,idat2,UN,0,idat2,IF,+,8,* \ CDEF:aggoutput=odat1,UN,0,odat1,IF,odat2,UN,0,odat2,IF,+,8,* \ AREA:agginput#00cc00:Input Aggregate \ LINE1:aggoutput#0000FF:Output Aggregate idat1が*UNKNOWN*データを持つ場合、次のCDEF式 idat1,UN,0,idat1,IF はスタックに1,0,NaNが入った状態となり、IF演算子がこの3つの値をポップして 0と入れ替えます。idat1が7942099のような実際の値の場合は、スタックは 0,0,7942099となり実際の値に置き換えられます。 ------------------------------------------------------------------------------- 例3 この例はINF演算子の2つの使い方を示しています。1つ目は1時間ごとに色が 切り替わる背景を作成するのに用いています。そして、ここではAREAとSTACKで グラフを描いていますが入力が1つでも*UNKNOWN*であればすべての入力はもう1つの INFで作成されたAREAで上書きされます。 rrdtool graph example.png --title="INF demo" \ DEF:val1=some.rrd:ds0:AVERAGE \ DEF:val2=some.rrd:ds1:AVERAGE \ DEF:val3=some.rrd:ds2:AVERAGE \ DEF:val4=other.rrd:ds0:AVERAGE \ CDEF:background=val4,POP,TIME,7200,%,3600,LE,INF,UNKN,IF \ CDEF:wipeout=val1,val2,val3,val4,+,+,+,UN,INF,UNKN,IF \ AREA:background#F0F0F0 \ AREA:val1#0000FF:Value1 \ STACK:val2#00C000:Value2 \ STACK:val3#FFFF00:Value3 \ STACK:val4#FFC000:Value4 \ AREA:wipeout#FF0000:Unknown 最初のCDEFはval4をダミーとして使っています。この値はスタックからすぐに 取り除かれ、その取得時刻のみを用いて条件判断が行われます。(UTC時間で) 偶数時であればその領域は色が塗られ、それ以外の領域は値が*UNKNOWN*に設定され 描画されません。 2つ目のCDEFはval1、val2、val3、val4のいずれかが*UNKNOWN*であるかどうかを、 それらの和で判断しています。そして*UNKNOWN*であれば(訳注:最初のCDEFと) 同様にINFを返し、データを表示しないためにUNKNを使います。 各グラフは特定の順番で描画されます。最初にbackgroundが描画され、次に その上にかぶさるように通常のAREAでグラフが描画されます。そして他のグラフが STACKされていきます。最後に、ここが重要ですが、全ての上にかぶさるように *UNKNOWN*データの印として目立つ赤で(訳注:Unknownが)描画されます。 注:この例ではデータが全て正の値だと仮定しています。負の値もある場合は 描画領域をグラフ全体に拡張するためにNEGINFを追加しなければならないでしょう。 ------------------------------------------------------------------------------- 著者 Tobias Oetiker ------------------------------------------------------------------------------- 参照 [1] http://www.dotpoint.com/xnumber/rpn_or_adl.htm