例えば散布図を描く、というタスクは次のように細分化される。それぞれを要素作業と呼ぶ。
これらの作業は
に分かれる。すると、総所要時間はこのように積み上げて計算される。
サブタスク | 要素時間 | 工数 | 所用時間 |
グラフエリアを初期化する | a | 1 | a |
グラフエリアを分割する | a | 1 | a |
枠を描く | b | 4 | 4b |
軸の目盛りを描く | b | 2k | 2kb |
軸の目盛りに数字を描く | d | 2k | 2kb |
軸のラベルを描く | c | 2 | 2b |
グラフのタイトルを描く | d | 1 | b |
グラフのサブタイトルを描く | d | 1 | b |
レコード数分だけの点を描く | c | n | nc |
合計 | 10+4k+n | 2a+(4+2k)b+nc+(2+2k)d |
この総所要時間は、aからdまでの要素時間の桁がそれほど違わないという前提を置くと、nが多くなればなるほど nc の項が支配的となる。 実際にはこれら以外に、打点数が多ければ多いほど、バッファも多く必要とするので、n^2に比例して総所要時間はこれよりも長くなる。
この前提で、各種のグラフィックスデータの挿入方法を比較してみると、次の通り。
出力方法 | 転送されるデータ | 再描画と再表示の対応 |
画面描画 | Rのグラフィックスデバイス | 打点しなおし |
コピー & ペースト (Windows) | 描画手順のオブジェクト(Windowsメタファイル) | 打点しなおし |
コピー & ペースト (Mac) | 描画手順のオブジェクト(TIFF) | 打点しなおし |
EPSファイル | 描画手順のプログラム(PostScript言語) | 打点しなおし |
JPEGファイル | 決めた大きさの画像データ(JPEG圧縮) | 画像のピクセル数分の点 |
BITMAPファイル | 決めた大きさの画像データ(圧縮なし) | 画像のピクセル数分の点 |
TIFFファイル | 決めた大きさの画像データ(TIFF) | 画像のピクセル数分の点 |
再描画が「打点しなおし」となる手段は、レコード数が大きく、図を構成するグラフィックス要素(打点、折れ線、面など)がレコード数nやn^2に比例する場合には、 張り込んだときの画面の描画、編集中にスクロールして画面の外に消えて、また戻ってきたときの再描画、印刷をするときのプリンタデータへの変換時、プレゼンテーションのときにその図が使われているページを表示するキーを押した瞬間から表示が完了するまで、などあらゆる機会で何度も何度も同じ時間を必要とすることになる。
nアイテムの時系列グラフを描く、というタスクは次のように細分化される。それぞれを要素作業と呼ぶ。
これらの作業は
に分かれる。すると、総所要時間はこのように積み上げて計算される。
サブタスク | 要素時間 | 工数 | 所用時間 |
グラフエリアを初期化する | a | 1 | a |
グラフエリアを分割する | a | 1 | a |
枠を描く | b | 4 | 4b |
軸の目盛りを描く | b | 2k | 2kb |
軸の目盛りに数字を描く | d | 2k | 2kb |
軸のラベルを描く | c | 2 | 2b |
グラフのタイトルを描く | d | 1 | b |
グラフのサブタイトルを描く | d | 1 | b |
k時点間の折れ線グラフを描く | b | nk | nkb |
合計 | 10+4k+n | 2a+(4+2k+nk)b+(2+2k)d |
この総所要時間は、aからdまでの要素時間の桁がそれほど違わないという前提を置くと、nが多くなればなるほど、また時点数kが多くなればなるほど nkb の項が支配的となる。 実際にはこれら以外に、打点数が多ければ多いほど、バッファも多く必要とするので、n*kもしくは(n*k)^2に比例して総所要時間はこれよりも長くなる。